Press "Enter" to skip to content

Pandas的数据筛选之isin和str.contains函数

筛选是我们平时做数据分析时使用非常频繁的功能,pandas库里面除了使用loc和iloc的筛选方法还有其它一些更加高级的方法,例如:isin和str.contains函数。

1、通过判断来进行筛选,以>,<,==,>=,<=来进行选择(“等于”一定是用‘==’,如果用‘=’就不是判断大小了)

首先打开一份数据

假如我需要筛选出收盘价大于28元的所有数据,只需要一行代码就搞定

df=df[df['收盘价']>28]

# 也可以这样写
df=df.loc[df['收盘价']>28,:]

当然也可以多条件判断,例如我需要筛选出开盘价小于28,并且收盘价大于28的数据,就可以这样写:

df=df[(df['开盘价']<28) & (df['收盘价']>28)]

注意:使用 &(且) 和 |(或) 时每个条件都要用小括号括起来。

使用isin函数筛选

如果要选择某列等于多个数值或者字符串时,要用到.isin(), 我们把df修改了一下(isin()括号里面应该是个list):假如我有一个这样的需求,筛选出收盘价包含21和20.11的数据

df=df[df['收盘价'].isin([21,20.11])] # 筛选出收盘价为:21和20.11的所有数据

使用loc函数筛选

df=df.loc[(df['收盘价']==26.12) | (df['收盘价']==29.72),:]

使用str.contains函数筛选

平时使用最多的筛选应该是字符串的模糊筛选,只要查询的DataFrame的某列或者某行包含查询字符串的部分字段就可以匹配出所有匹配到的数据,在pandas里我们可以用.str.contains()来实现。

如上图,假如我需要筛选出 家庭住址 这一列包含江苏省的所有数据,就可以使用 .str.contains()来实现,contains属于模糊查找,只要包含就筛选。

df=df.loc[df['家庭住址'].str.contains('江苏省')]

这里还要补充一个知识点,就是:取反 ~,在df[‘家庭住址’]前面加上~这个符号(例如,上图筛选出来所有包含江苏省的数据,如果使用取反,那么就筛选出除了包含“ 江苏省 ”以外的所有数据)

df=df.loc[~df['家庭住址'].str.contains('江苏省')]
发表评论

您的电子邮箱地址不会被公开。