看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 数据筛选时可以在括号里给定一个布尔序列,为 True 的位置为选中的内容。在本例中,我们筛选是否包含一定数字的数据。
数据源如下:
import pandas as pd
df = pd.DataFrame({
'a': [111, 112, 234, 11, 23,],
'b': [2, 8, 10, 6, 4, ],
}
)
df
'''
a b
0 111 2
1 112 8
2 234 10
3 11 6
4 23 4
'''
需要筛选出列 a 的数据中包含 1 或 包含 2 且不含 3 的行,要注意匹配目标不是整体数据,而是单元格中的数字。
a 列的是一个数字类型的列,如果单个数据判断是否包含某个数字,则可以按照字符串来操作。
为了保持原数据的类型和形式,我们将 a 列转为字符串类型赋值到一个新的变量。
判断字符串是是不否包含某些字符串可以使用 .str.xxx
访问器的 contains() 方法,不包含在表达式前加 ~
取反。
最后将两个逻辑 &
连接,让两个判断逻辑同时成立。
转 a 列为字符类型,赋值给 ser 变量:
ser = df.a.astype(str)
ser
'''
0 111
1 112
2 234
3 11
4 23
Name: a, dtype: object
'''
编写包含逻辑,包含 1 或者 2 可以用正则表达式的形式写作 1|2
。总体逻辑代码为:
ser.str.contains('1|2') & ~ser.str.contains('3')
'''
0 True
1 True
2 False
3 True
4 False
Name: a, dtype: bool
'''
最后将这个布尔序列传入方括号:
df[ser.str.contains('1|2') & ~ser.str.contains('3')]
'''
a b
0 111 2
1 112 8
3 11 6
'''
这样就完成了需求的数据筛选。
(完)
更新时间:2024-08-18 16:06:52 标签:pandas python 包含 筛选