pandas 筛选数据的 8 个骚操作
作者 | 东哥起飞
来源 | Python数据科学
日常用Python
做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。
总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearn
的boston
数据举例介绍。
from sklearn import datasets
import pandas as pdboston = datasets.load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
1. []
第一种是最快捷方便的,直接在dataframe的[]
中写筛选的条件或者组合条件。比如下面,想要筛选出大于NOX
这变量平均值的所有数据,然后按NOX
降序排序。
df[df['NOX']>df['NOX'].mean()].sort_values(by='NOX',ascending=False).head()
当然,也可以使用组合条件,条件之间使用逻辑符号& |
等。比如下面这个例子除了上面条件外再加上且条件CHAS为1
,注意逻辑符号分开的条件要用()
隔开。
df[(df['NOX']>df['NOX'].mean())& (df['CHAS'] ==1)].sort_values(by='NOX',ascending=False).head()
2. loc/iloc
除[]
之外,loc/iloc
应该是最常用的两种查询方法了。loc
按标签值(列名和行索引取值)访问,iloc
按数字索引访问,均支持单值访问或切片查询。除了可以像[]
按条件筛选数据以外,loc
还可以指定返回的列变量,从行和列两个维度筛选。
比如下面这个例子,按条件筛选出数据,并筛选出指定变量,然后赋值。
df.loc[(df['NOX']>df['NOX'].mean()),['CHAS']] = 2
3. isin
上面我们筛选条件< > == !=
都是个范围,但很多时候是需要锁定某些具体的值的,这时候就需要isin
了。比如我们要限定NOX
取值只能为0.538,0.713,0.437
中时。
df.loc[df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)
当然,也可以做取反操作,在筛选条件前加~
符号即可。
df.loc[~df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)
4. str.contains
上面的举例都是数值大小比较的筛选条件,除数值以外当然也有字符串的查询需求。pandas
里实现字符串的模糊筛选,可以用.str.contains()
来实现,有点像在SQL语句里用的是like
。
下面利用titanic的数据举例,筛选出人名中包含Mrs
或者Lily
的数据,|
或逻辑符号在引号内。
train.loc[train['Name'].str.contains('Mrs|Lily'),:].head()
.str.contains()
中还可以设置正则化筛选逻辑。
case=True:使用case指定区分大小写
na=True:就表示把有NAN的转换为布尔值True
flags=re.IGNORECASE:标志传递到re模块,例如re.IGNORECASE
regex=True:regex :如果为True,则假定第一个字符串是正则表达式,否则还是字符串
5. where/mask
在SQL里,我们知道where
的功能是要把满足条件的筛选出来。pandas中where
也是筛选,但用法稍有不同。
where
接受的条件需要是布尔类型的,如果不满足匹配条件,就被赋值为默认的NaN
或其他指定值。举例如下,将Sex
为male
当作筛选条件,cond
就是一列布尔型的Series,非male的值就都被赋值为默认的NaN
空值了。
cond = train['Sex'] == 'male'
train['Sex'].where(cond, inplace=True)
train.head()
也可以用other
赋给指定值。
cond = train['Sex'] == 'male'
train['Sex'].where(cond, other='FEMALE', inplace=True)
甚至还可以写组合条件。
train['quality'] = ''
traincond1 = train['Sex'] == 'male'
cond2 = train['Age'] > 25train['quality'].where(cond1 & cond2, other='低质量男性', inplace=True)
mask
和where
是一对操作,与where
正好反过来。
train['quality'].mask(cond1 & cond2, other='低质量男性', inplace=True)
6. query
这是一种非常优雅的筛选数据方式。所有的筛选操作都在''
之内完成。
# 常用方式
train[train.Age > 25]
# query方式
train.query('Age > 25')
上面的两种方式效果上是一样的。再比如复杂点的,加入上面的str.contains
用法的组合条件,注意条件里有''
时,两边要用""
包住。
train.query("Name.str.contains('William') & Age > 25")
在query
里还可以通过@
来设定变量。
name = 'William'
train.query("Name.str.contains(@name)")
7. filter
filter
是另外一个独特的筛选功能。filter
不筛选具体数据,而是筛选特定的行或列。它支持三种筛选方式:
items:固定列名
regex:正则表达式
like:以及模糊查询
axis:控制是行index或列columns的查询
下面举例介绍下。
train.filter(items=['Age', 'Sex'])
train.filter(regex='S', axis=1) # 列名包含S的
train.filter(like='2', axis=0) # 索引中有2的
train.filter(regex='^2', axis=0).filter(like='S', axis=1)
8. any/all
any
方法意思是,如果至少有一个值为True
结果便为True
,all
需要所有值为True
结果才为True
,比如下面这样。
>> train['Cabin'].all()
>> False
>> train['Cabin'].any()
>> True
any
和all
一般是需要和其它操作配合使用的,比如查看每列的空值情况。
train.isnull().any(axis=0)
再比如查看含有空值的行数。
>>> train.isnull().any(axis=1).sum()
>>> 708
参考:
[1] https://pandas.pydata.org/
[2] https://www.gairuo.com/p/pandas-selecting-data
[3] https://blog.csdn.net/weixin_43484764/article/details/89847241
往期回顾
太卷了!AI 高数考试正确率81%
pandas 文本处理大全
2D变身3D,来看英伟达的AI“新”魔法!
如何用 Python 实现景区安防系统?
分享
点收藏
点点赞
点在看
pandas 筛选数据的 8 个骚操作相关推荐
- Pandas+Numpy 数据中空值的处理操作:判断、查找、填充及删除
本文整理了数据中空值的处理操作,主要内容如下: 判断数据中是否有空值 统计空值/非空值数量 根据空值筛选数据 查找空值索引 删除空值 dropna()函数 填充空值fillna()函数 为了便于描述, ...
- 数据分析学习 excel的骚操作合集(则秀excel课程笔记)
文章目录 前言 一.自动填充 二.选取区域 三.复制与粘贴 四.公式与函数 五.输入公式 六.快速求和 七.绝对引用 八.if函数 九.sumif,averageif函数 十.定义名称 十一.数字与数 ...
- Pandas——筛选数据(loc、iloc)
文章目录 1.普通方法筛选 2.loc(纯标签筛选) 3. iloc(纯数字筛选) 4.ix(标签与数字的混合筛选) 5.判断条件筛选 1.普通方法筛选 我们首先构造了一个 5X4 的矩阵数据. im ...
- python pandas筛选数据_Python基础 | pandas中数据的筛选(index subset)
本文数据可在此处下载,密码:vwy3 # 加载数据 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测 ...
- pandas筛选数据_2_条件筛选
1. 多条件筛选 import pandas as pd data=[['mark',55,'Italy',4.5,'Europe'],['John',33,'China',3.8,'Asian'], ...
- sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
原生sd.js---------------------------------------------------------------- const API_ROOT_URL = "h ...
- python pandas筛选数据_Python pandas从字符串列的数据选择中筛选出nan
放下它们:nms.dropna(thresh=2) 这将删除至少有两个非-NaN的所有行. 然后您可以删除名称所在的位置NaN:In [87]: nms Out[87]: movie name rat ...
- pandas:数据筛选的8个操作
文章来源于 公众号 Python数据科学的文章pandas 筛选数据的 8 个骚操作,是个很不错的系列,感兴趣的同学可以移步去学习. 数据分析最常用到的就是查询筛选,按各种条件.各种维度以及组合挑出我 ...
- 20 个短小精悍的 pandas 骚操作
本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够. 1. ExcelWriter 很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示 ...
最新文章
- C++中的向上类型转换和向下类型转换+四种强制类型转换
- lisp不是函授型语言_【神奇的函数式编程语言的独特功能】Lisp 的运行期修改、编译代码,并替换当前运行版本的试验...
- Python之Django框架开发博客
- 2009设计大餐 Adobe CS4 全集下载
- 布鲁克大学计算机科学,布鲁克大学计算机科学本科.pdf
- React开发(257):react项目理解 ant design model提示问题
- 《操作系统》OS学习(二):启动、中断、异常
- sql server远程主机强迫关闭了一个_交换机远程端口镜像
- 关于IE、Firefox、Opera页面呈现异同(转载)
- [转]如果你出现这十种迹象,你就该跳槽了
- Spark安装和配置
- 360 组织全局 HOOK 的 dll 加载
- 【预测模型】基于matlab BP神经网络预测【含Matlab源码 221期】
- Internet Download Manager永久版功能强大的网络下载器
- Photoshop插件-动作相关概念-ActionList-ActionDescriptor-ActionList-动作执行加载调用删除-PS插件开发
- 基于JavaWeb的小型超市管理系统的设计与实现
- 学报格式和论文格式一样吗_工大学报论文格式要求
- php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
- 牛腩老师讲B/S开发小结 触发器 主键 外键
- 亲测有效 debian出现does not have a Release file. N: Updating from such a repository can‘t be done securely
热门文章
- Linus批评英特尔的LAM代码,拒绝将其合并到内核
- 零失误绕制无线充电线圈
- idea 项目能运行,但是代码冒红-解决措施
- ModuleNotFoundError: No module named 'skimage'报错信息的解决方法及如何使用国内镜像安装库文件
- 配置Web.config文件显示错误信息
- 模糊查询银行卡号mysql_mysql like查询字符串示例语句
- 深度学习之openvino预训练模型测试(车牌识别)
- 出门在外如何保管毕业证原件_出门在外时如何控制HomeKit智能家居
- 百度想成为伟大的金融科技公司?太迟了
- 3章等价类划分法-城市号码