作者 | 东哥起飞

来源 | Python数据科学

日常用Python做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。

总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearnboston数据举例介绍。

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或其他指定值。举例如下,将Sexmale当作筛选条件,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)

maskwhere是一对操作,与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结果便为Trueall需要所有值为True结果才为True,比如下面这样。

>> train['Cabin'].all()
>> False
>> train['Cabin'].any()
>> True

anyall一般是需要和其它操作配合使用的,比如查看每列的空值情况。

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 个骚操作相关推荐

  1. Pandas+Numpy 数据中空值的处理操作:判断、查找、填充及删除

    本文整理了数据中空值的处理操作,主要内容如下: 判断数据中是否有空值 统计空值/非空值数量 根据空值筛选数据 查找空值索引 删除空值 dropna()函数 填充空值fillna()函数 为了便于描述, ...

  2. 数据分析学习 excel的骚操作合集(则秀excel课程笔记)

    文章目录 前言 一.自动填充 二.选取区域 三.复制与粘贴 四.公式与函数 五.输入公式 六.快速求和 七.绝对引用 八.if函数 九.sumif,averageif函数 十.定义名称 十一.数字与数 ...

  3. Pandas——筛选数据(loc、iloc)

    文章目录 1.普通方法筛选 2.loc(纯标签筛选) 3. iloc(纯数字筛选) 4.ix(标签与数字的混合筛选) 5.判断条件筛选 1.普通方法筛选 我们首先构造了一个 5X4 的矩阵数据. im ...

  4. python pandas筛选数据_Python基础 | pandas中数据的筛选(index subset)

    本文数据可在此处下载,密码:vwy3 # 加载数据 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测 ...

  5. pandas筛选数据_2_条件筛选

    1. 多条件筛选 import pandas as pd data=[['mark',55,'Italy',4.5,'Europe'],['John',33,'China',3.8,'Asian'], ...

  6. sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    原生sd.js---------------------------------------------------------------- const API_ROOT_URL = "h ...

  7. python pandas筛选数据_Python pandas从字符串列的数据选择中筛选出nan

    放下它们:nms.dropna(thresh=2) 这将删除至少有两个非-NaN的所有行. 然后您可以删除名称所在的位置NaN:In [87]: nms Out[87]: movie name rat ...

  8. pandas:数据筛选的8个操作

    文章来源于 公众号 Python数据科学的文章pandas 筛选数据的 8 个骚操作,是个很不错的系列,感兴趣的同学可以移步去学习. 数据分析最常用到的就是查询筛选,按各种条件.各种维度以及组合挑出我 ...

  9. 20 个短小精悍的 pandas 骚操作

    本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够. 1. ExcelWriter 很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示 ...

最新文章

  1. C++中的向上类型转换和向下类型转换+四种强制类型转换
  2. lisp不是函授型语言_【神奇的函数式编程语言的独特功能】Lisp 的运行期修改、编译代码,并替换当前运行版本的试验...
  3. Python之Django框架开发博客
  4. 2009设计大餐 Adobe CS4 全集下载
  5. 布鲁克大学计算机科学,布鲁克大学计算机科学本科.pdf
  6. React开发(257):react项目理解 ant design model提示问题
  7. 《操作系统》OS学习(二):启动、中断、异常
  8. sql server远程主机强迫关闭了一个_交换机远程端口镜像
  9. 关于IE、Firefox、Opera页面呈现异同(转载)
  10. [转]如果你出现这十种迹象,你就该跳槽了
  11. Spark安装和配置
  12. 360 组织全局 HOOK 的 dll 加载
  13. 【预测模型】基于matlab BP神经网络预测【含Matlab源码 221期】
  14. Internet Download Manager永久版功能强大的网络下载器
  15. Photoshop插件-动作相关概念-ActionList-ActionDescriptor-ActionList-动作执行加载调用删除-PS插件开发
  16. 基于JavaWeb的小型超市管理系统的设计与实现
  17. 学报格式和论文格式一样吗_工大学报论文格式要求
  18. php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
  19. 牛腩老师讲B/S开发小结 触发器 主键 外键
  20. 亲测有效 debian出现does not have a Release file. N: Updating from such a repository can‘t be done securely

热门文章

  1. Linus批评英特尔的LAM代码,拒绝将其合并到内核
  2. 零失误绕制无线充电线圈
  3. idea 项目能运行,但是代码冒红-解决措施
  4. ModuleNotFoundError: No module named 'skimage'报错信息的解决方法及如何使用国内镜像安装库文件
  5. 配置Web.config文件显示错误信息
  6. 模糊查询银行卡号mysql_mysql like查询字符串示例语句
  7. 深度学习之openvino预训练模型测试(车牌识别)
  8. 出门在外如何保管毕业证原件_出门在外时如何控制HomeKit智能家居
  9. 百度想成为伟大的金融科技公司?太迟了
  10. 3章等价类划分法-城市号码