当前位置: 首页 > 编程日记 > 正文

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

992fbf74435171552dc152d0190f2467.gif

作者 | 俊欣

来源 | 关于数据分析与可视化

今天小编来和大家说一说怎么从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

4ffbb2a6e8c79d9041b488a460f24a06.png

当然我们也可以和.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

8cc2cda27ea5020a3187c274a91a9481.png

而要是文本数据当中包含了一些特殊符号,例如+^以及=等符号时,我们可以将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

1686a0c405d8706f242f7c3fe49f3f54.png

我们用了|来表示“或”的意思,将电影类别包含“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

599606cce99d392b7be42d30180112e6.png

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

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

94e989718deb7e63c3eb027126551315.png

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

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

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

output

c51e60f02b98384e642a83e31603b339.png

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

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

output

91592531ec3630881b5d8caa84481da6.png

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

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

2d513d2a8db0c3ace0fef2ca99a9ca3b.png

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

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

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

df[mask].head()

output

e25940f281a04400515a373942f708fd.png

filter方法

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

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

output

820893ef1a88e8642804814f8c86c5ec.png

当然我们也可以用.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

f398037197ed491e8fdfbf3e95f28076.png

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

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

筛选文本数据的其他方法

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

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

output

f9835ec4a586b58cee46b9de4e50525d.png

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

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

output

1432404b3fdbd3d2801513db5ada9cc9.png

那既然用到了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()

66638afdd12bbb29066fb00e3645bd5c.gif

74479e42303b77419a65c673270bf39a.png

资讯

IEEE发布年终总结,AI奇迹不是故事

资讯

Log4j还没完事,新的漏洞又来

资讯

AI语言模型是否越大越好?

资讯

这个AI模型火上GitHub热榜

0b5e6c0a8fb16cf6b31306001960dc33.png

分享

3c6e7435ff1a40e9b8cbe20d5858755d.png

点收藏

533f16a62010bc9b418942abc1078920.png

点点赞

83a2e4af2f7831401010e2c3b357193f.png

点在看

相关文章:

stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承

一、内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮、变暗、渐变颜色等处理十分的方便。 lighten(color, 10%); /* 返回的颜色在color基础…

用 Python 制作酷炫的可视化大屏,特简单!

作者 | 小F来源 | 法纳斯特在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章、信息冗余、价值较低。要想数据达到生动有趣、让人一目了然、豁然开朗的效果,就需要借助数据可视化。以…

HTTP协议中的Tranfer-Encoding:chunked编码解析

当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chu…

[转] splice系列系统调用

关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得&…

嵌入式s5vp210裸机 KXTF9-2050(G-sensor)

1.KXTF9-2050简介 KXTF9-205是G-sensor的一种,G-sensor(Gravity sensor),重力传感器,又名加速度传感器(accelerometer),是能感知加速度大小的MEMS(微机电系统)传感器。使用I2C协议和…

JavaScript面向对象编程

自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升。JavaScript最基本的使用,以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。1. 用JavaScript实现类 JavaScritpt没…

sublime text3 前端插件介绍

Emmet插件 Emmet插件可以说是使用Sublime Text进行前端开发必不可少的插件 它让编写HTML代码变得极其简单高效 基本用法:输入标签简写形式,然后按Tab键 关于Emmet的更多介绍,请查看官方文档 这份速查表,可以帮你快速记忆简写形式 …

如何使用 OpenCV Python 检测颜色

作者 | 小白来源 | 小白学视觉在这篇文章中,我们将看到如何使用 Python 中的 OpenCV 模块检测颜色,进入这个领域的第一步就是安装下面提到的模块。pip install opencv-python pip install numpy然后,导入模块。读取图像并使用 OpenCV 模块中的…

使用树形结构保存实体

阅读原文请访问我的博客BrightLoongs Blog之前在项目需要实现一个功能——将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中;由于xml结构的数据是结构化的数据,所以需要保证保存的数据具有正确的主外键关联。…

在Javascript中使用面向对象的编程

by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章。翻译不好的地方,还望大家指正,谢谢。 如果您需要,可以访问下面的地址取得原文: http://mckoss.com/jscript/obj…

马斯克嘲笑「元宇宙」的想法,并给年轻人5条鸡汤

编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)SpaceX 和特斯拉的CEO 马斯克在接受 The Babylon Bee 的采访中,当被问到元宇宙的问题时,马斯克只笑了笑。马斯克表示:“我对元宇宙这个概念没有什么印象,尽…

OpenLDAP自定义属性的启用

2019独角兽企业重金招聘Python工程师标准>>> # ucode# This multivalued field is used to record the values of the license or# registration plate associated with an individual.attributetype ( 2.16.840.1.113730.3.1.900 NAME ucode DESC user code …

硬中断与软中断的区别!

硬中断: 1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上&am…

smarty模板

<?phprequire(../libs/Smarty.class.php);$smarty new Smarty;//$smarty->force_compile true;//$smarty->debugging true;//$smarty->caching true;//$smarty->cache_lifetime 120;$Name"Linux环境高级编程";$smarty->assign("name&qu…

乘“云原生”之风、踏“数字化”的浪,《新程序员003》开启预售!

12月30日&#xff0c;新年的钟声还有两天敲响&#xff0c;CSDN倾情策划出品的《新程序员003&#xff1a;云原生和全面数字化实践》&#xff08;以下简称《新程序员003》&#xff09;重磅开启预售&#xff01;新一年&#xff0c;新气象~预祝所有开发者在新的一年中大神附体&…

BZOJ4245 : [ONTAK2015]OR-XOR

按位考虑&#xff0c;逐步确定答案。 设当前是第i位&#xff0c;求出第i位的前缀异或和。 若存在m个0且所有数字异或和为0&#xff0c;那么答案的这一位可以为0&#xff0c;并把所有1的位置给标记为不可选。 否则答案的这一位只能是1。 时间复杂度$O(n\log n)$。 #include<c…

关键词排名下降怎么办-优八学院给你支招

优八学院下面为大家解决一下关于关键词排名下降的问题。在我们进行网站优化的时候&#xff0c;往往会出现关键词排名下降的现象。对于这种情况&#xff0c;我们要区别是否是正常的浮动&#xff0c;由于有时候搜索引擎也会发生错误&#xff0c;导致关键词排名下降&#xff0c;我…

全面解析 Kmeans 聚类算法(Python)

作者 | 泳鱼来源 | 算法进阶一、聚类简介Clustering (聚类)是常见的unsupervised learning (无监督学习)方法&#xff0c;简单地说就是把相似的数据样本分到一组&#xff08;簇&#xff09;&#xff0c;聚类的过程&#xff0c;我们并不清楚某一类是什么&#xff08;通常无标签信…

.htaccess的重写规则

.htaccess基本语法和应用 .htaccess是Apache服务器的一个非常强大的分布式配置文件。正确的理解和使用.htaccess文件&#xff0c;可以帮助我们优化自己的服务器或者虚拟主机。 如何启用htaccess 以windows为例&#xff0c;进入apache/conf目录&#xff0c;找到httpd.conf文件&a…

amaze ui各个模块简单说明

amaze ui各个模块简单说明 导航添加依据 http://amazeui.org/css/ 下面内容属学习笔记&#xff0c;如有理解偏差和错误请留言相告&#xff0c;感谢&#xff01;* &#xff08;官网这块写的很详细&#xff09; 一、基本样式 1.统一样式 说明了为什么使用Normalize&#xff0c;而…

由浅入深剖析.htaccess

1、.htaccess文件使用前提.htaccess的主要作用就是实现url改写&#xff0c;也就是当浏览器通过url访问到服务器某个文件夹时&#xff0c;作为主人&#xff0c;我们可以来接待这个url&#xff0c;具体地怎样接待它&#xff0c;就是此文件的作用。所有的访问都是通过URL实现&…

分享几个 Pyecharts 技巧,助你画出更直观/炫酷的图表

作者 | 俊欣来源 | 关于数据分析与可视化想必大家应该也已经看到很多关于数据分析的内容了&#xff0c;今天小编就为大家来分享一下国产可视化库pyecharts在绘制图表时一些的技巧&#xff0c;帮助读者画出更加酷炫以及可读性更高的图&#xff0c;当然在这之前呢&#xff0c;我们…

虚拟化--006 VCAC的sso配置成功

转载于:https://blog.51cto.com/williamliuwen/1686492

ionic app 开发和生产环境的配置

前言 像 Angular2 一样&#xff0c;希望 ionic 可以提供 2 个文件 ( environment.dev.ts 和 environment.prod.ts )&#xff0c;其中包含与开发和生产环境相对应的不同值的变量。在构建过程中&#xff0c;要在应用程序中绑定适当的文件。 实现步骤 在 src/config 中&#xff0c…

Android Properties 存储

1.初始化 1 private static void initProperties(){2 File logFile new File(Constants.PROGRESS_PROPERTIES);3 props new Properties();4 if(!logFile.exists()){5 //创建并初始化配置文件6 FileUtils.createFolder(Const…

php函数serialize()与unserialize()

php函数serialize()与unserialize()说明及案例。想要将已序列化的字符串变回 PHP 的值&#xff0c;可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚至可以serialize()那些包含了指向其自身引用的数组。你正serialize()的数组&#xff0f;对象中的引用也…

2500 字全方面解读 Python 的格式化输出

作者 | 欣一来源 | Python爱好者集中营今天小编来和大家聊聊Python当中的格式化输出&#xff0c;希望会对大家所有帮助%占位符的使用我们先来看一下下面的这个例子&#xff0c;country_ "France" currency_ "Euro"print("%s is the currency of %s&…

python GUI编程( 二 ) (基于PyQt5)

第二节 本节介绍添加窗口图标&#xff0c;在窗口内添加按钮&#xff0c;在窗口内添加提示框。 导入模块&#xff1a; from PyQt5.QWidgets import QWidget,QPushButton,QApplication from PyQt5.QtGui import QIcon,QFont from PyQt5.QtCore import QCoreApplication import sy…

Linux+Apache2+openssl实现https验证

首先安装SSL&#xff0c;再编译安装APACHE&#xff0c;再配置证书即可 1.下载apache和openssl网址&#xff1a;http://www.apache.org http://www.openssl.org2.解压#tar zxvf httpd-2.0.54.tar.gz#tar zxvf openssl-0.9.7g.tar.gz3.编译安装openssl,这个软件主要是用来生…

践行科技向善,腾讯Light 把光引向厦门

作者 | 贾凯强出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;凛冬虽至&#xff0c;但沿着东南海域一路向南&#xff0c;总有寒风吹不灭的绿意&#xff0c;也有四季不败落的花香。今年的冬天厦门始终环绕着勃勃生机&#xff0c;也有无数的追光者来到了这里。因为关注…