今天来和大家说一说怎么从DataFrame数据集中筛选符合指定条件的数据,希望会对读者朋友有所帮助。

导入数据集和模块

我们先导入pandas模块,并且读取数据,代码如下

import pandas as pd
df = pd.read_csv("netflix_titles.csv")
df.head()

根据文本内容来筛选

首先我们可以根据文本内容直接来筛选,返回的是True如果文本内容是相匹配的,False如果文本内容是不匹配的,代码如下

mask = df['type'].isin(['TV Show'])
mask.head()

output

0    False
1     True
2     True
3     True
4     True
Name: type, dtype: bool

然后我们将这个mask作用到整个数据集当中,返回的则是满足与True条件的数据

df[mask].head()

output

当然我们也可以和.loc方法来相结合,只挑选少数的几个指定的列名,代码如下

df.loc[mask, ['title','country','duration']].head()

output

title       country   duration
1          Blood & Water  South Africa  2 Seasons
2              Ganglands           NaN   1 Season
3  Jailbirds New Orleans           NaN   1 Season
4           Kota Factory         India  2 Seasons
5          Midnight Mass           NaN   1 Season

当然要是我们所要筛选的文本内容并不仅仅只有1个,就可以这么来操作,代码如下

mask = df['type'].isin(['Movie','TV Show'])

结果返回的是True,要是文本内容全部都匹配,要是出现一个不匹配的现象则返回的是False

根据关键字来筛选

我们可以根据某个关键字来筛选数据,数据集当中的listed-in包含的是每部电影的种类,当然很多电影并不只有一个种类,而是同时涉及到很多个种类,例如某一部电影既有“科幻”元素,也有“爱情”元素同时还包含了部分“动作片”的元素。

我们按照某个关键字来筛选,例如筛选出包含了“horror”这个关键字的影片,代码如下

mask = df['listed_in'].str.contains('horror', case=False, na=False)

其中的case=False表明的是忽略字母的大小写问题,na=False表明的是对于缺失值返回的是False

df[mask].head()

output

而要是文本数据当中包含了一些特殊符号,例如+^以及=等符号时,我们可以将regex参数设置成False(默认的是True),这样就不会被当做是正则表达式的符号,代码如下

df['a'].str.contains('^', regex=False)
#或者是
df['a'].str.contains('\^')

根据多个关键字来筛选

当关键字不仅仅只有一个的时候,就可以这么来操作

pattern = 'horror|stand-up'
mask = df['listed_in'].str.contains(pattern, case=False, na=False)
df[mask].sample(5)

output

我们用了|来表示“或”的意思,将电影类别包含“horror”或者是“stand-up”这两类的电影筛选出来

除此之外,我们还可以这么来做

mask1 = df['listed_in'].str.contains("horror", case=False)
mask2 = df['listed_in'].str.contains("stand-up", case=False)
df[mask1 | mask2].sample(5)

出来的结果和上述一样,只不过过程可能稍加繁琐,除了|表示的是“或”之外,也有表示的是和,也就是&标识符,意味着条件全部都需要满足即可,例如

mask1 = (df['listed_in'].str.contains('horror', case=False, na=False))
mask2 = (df['type'].isin(['TV Show']))
df[mask1 & mask2].head(3)

output

我们可以添加多个条件在其中,多个条件同时满足,例如

mask1 = df['rating'].str.contains('tv', case=False, na=False)
mask2 = df['listed_in'].str.contains('tv', case=False, na=False)
mask3 = df['type'].str.contains('tv', case=False, na=False)
df[mask1 & mask2 & mask3].head()

output

正则表达式在pandas筛选数据中的应用

我们同时也可以将正则表达式应用在如下的数据筛选当中,例如str.contains('str1.*str2')代表的是文本数据是否以上面的顺序呈现,

pattern = 'states.*mexico'
mask = data['country'].str.contains(pattern, case=False, na=False)
data[mask].head()

output

其中.*在正则表达式当中表示匹配除换行符之外的所有字符,我们需要筛选出来包含states以及mexico结尾的文本数据,我们再来看下面的例子

pattern = 'states.*mexico|mexico.*states'
mask = data['country'].str.contains(pattern, case=False, na=False)
data[mask].head()

output

我们筛选出来的文本数据满足两个条件当中的一个即可

lambda方法来筛选文本数据中的应用

有一些筛选数据的方式可能稍显复杂,因此需要lambda方法的介入,例如

cols_to_check = ['rating','listed_in','type']
pattern = 'tv'
mask = data[cols_to_check].apply(lambda col:col.str.contains(pattern, na=False, case=False)).all(axis=1)

我们需要在ratinglisted_in以及type这三列当中筛选出包含tv的数据,我们来看一下结果如何

df[mask].head()

output

我们再来看下面的这个例子,

mask = df.apply(lambda x: str(x['director']) in str(x['cast']), axis=1)

上面的例子当中是来查看director这一列是否被包含在了cast这一列当中,结果如下

df[mask].head()

output

filter方法

我们还可以通过filter方法来筛选文本的数据,例如筛选出列名包含in的数据,代码如下

df.filter(like='in', axis=1).head(5)

output

当然我们也可以用.loc方法来实现,代码如下

df.loc[:, df.columns.str.contains('in')]

出来的结果和上述的一样

要是我们将axis改成0,就意味着是针对行方向的,例如筛选出行索引中包含Love的影片,代码如下

df_1 = df.set_index('title')
df_1.filter(like='Love', axis=0).head(5)

output

当然我们也可以通过.loc方法来实现,代码如下

df_1.loc[df_1.index.str.contains('Love'), :].head()

筛选文本数据的其他方法

我们可以使用query方法,例如我们筛选出国家是韩国的影片

df.query('country == "South Korea"').head(5)

output

例如筛选出影片的添加时间是11月的,代码如下

mask = df["date_added"].str.startswith("Nov")
df[mask].head()

output

那既然用到了startswith方法,那么就会有endswith方法,例如

df['col_name'].str.endswith('2019')

除此之外还有这些方法可以用来筛选文本数据

  • df['col_name'].str.len()>10

  • df['col_name'].str.isnumeric()

  • df[col_name].str.isupper()

  • df[col_name].str.islower()

END -

本文为转载分享&推荐阅读,若侵权请联系后台删除
对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,可以在全网搜索书名进行了解:

3000字详解Pandas数据查询,建议收藏相关推荐

  1. 3000 字详解 Pandas 数据查询,建议收藏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来和大家说一说怎么从DataFrame数据集中筛选符合指定条件的数据,希望会对读者朋友有所帮助. 导入数据集和模块 我们先导入pandas模块, ...

  2. ❤️pandas df.loc[] 与 df.iloc[] 详解及其区别,建议收藏❤️

    文章目录 思维导图 一.df.loc[]与df.iloc[]区别 二.df.loc[]详解 df.loc[] 允许输入 三.df.iloc[]详解 df.iloc[] 允许输入 df.loc[]与df ...

  3. ❤️思维导图整理大厂面试高频数组: 两万字详解各种数组求和(建议收藏)❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  4. 全文2500字 详解Pandas与Lambda结合进行高效数据分析

    这篇文章小编来讲讲lambda方法以及它在pandas模块当中的运用,熟练掌握可以极大地提高数据分析与挖掘的效率 导入模块与读取数据 我们第一步需要导入模块以及数据集 import pandas as ...

  5. 8000字详解银行业数据治理架构体系搭建

    为引导银行业金融机构加强数据治理,充分发挥数据价值,全面向高质量发展转变,银监会于2018年发布了<银行业金融机构数据治理指引>,主要内容如下: 近年来银行业金融机构在业务快速发展过程中, ...

  6. 3000字详解,“会裂变”的小程序产品设计案例

    在互联网流量越来越贵的今天,获取精准用户或种子用户成了产品经理或运营同学最渴望不可求的事.近期带着团队做了几次裂变案例后,发现裂变不仅是针对于社群,针对小程序这样的产品若在设计考虑了裂变机制,则可以借 ...

  7. 【node节点版本管理器NVM,详解安装教程,建议收藏】

    平常我们在做开发时,可能会用到不同的nodejs版本,如果每次都进行下载安装,就很麻烦了.而nvm刚好帮助我们解决了这一问题. 1.下载nvm nodejs官网:http://nodejs.cn/ n ...

  8. 【SQL】一文详解嵌入式SQL(建议收藏)

  9. C#虚方法详解(一切尽有,建议收藏!!!)

    前言:通过这篇文章可以将C#中的虚方法理解透彻,讲的非常详细,十分推荐刚入门的小伙伴收藏嗷!!! 目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六. ...

最新文章

  1. Android NDK开发之旅31 FFmpeg音频解码
  2. 谷歌大脑新研究:强化学习如何学会用声音来观察?
  3. 【MySQL】MySQL表的增删改查(进阶-下)
  4. Ubentu下命令行安装chrome浏览器
  5. Oracle Internal Event:10200 Consistent Read诊断事件
  6. 读取 Radio 的值
  7. 微博每日数十亿级业务下的计数器如何扩展Redis?
  8. 人工智能 一种现代方法 第3章 用搜索树对问题求解
  9. matlab中转置操作,如何转置MATLAB表?
  10. XRecycleView (Scrapped or attached views may not be recycled)
  11. Centerface + Facenet实现视频人脸识别(附代码)
  12. python计算2的平方代码_Python练习实例46 | 求输入数字的平方,如果平方运算后小于 50 则退出。...
  13. Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)
  14. 使用MAC中碰到的各种问题
  15. 电感线圈绕制常用的漆包线
  16. 【电子科学系保研】-- 湖南大学保研之旅
  17. 数组和链表的增删改查速度比较
  18. C语言入门最基础教学(编译器下载)
  19. 判断一个多边形的凸凹性
  20. json和gson傻傻分不清楚

热门文章

  1. CC2530, 各种智能家居通信技术比较
  2. 斯坦福大学机器学习第五课正则化“
  3. bwlabel算法_bwlabel函数的c++实现
  4. PLSQL Developer中数值字段由科学计数法改为普通数值显示
  5. mybatis和hibernate的区别---Mybatis的学习笔记(四)
  6. IOS 学习笔记 2015-03-24 OC-API-常用结构体
  7. qq邮箱使用outlook 2007
  8. 待字闺中:日志查询。(网络摘要)
  9. js accordian效果
  10. 寻一名师傅叫我破译电脑各种密码和攻克防火墙