看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在做数据筛选时,有时会遇到比较复杂的逻辑,但是我们知道了筛选原理就能灵活运动相关操作筛选想要的数据。在本例中,我们将完成除了筛选直接条件的数据外,还要筛选数据上下行数据。
我们的示例数据如下:
import pandas as pd
df = pd.DataFrame({'a': [*'abcdefghij'], 'b': [*'NYYNNNNYNN']})
df
'''
a b
0 a N
1 b Y
2 c Y
3 d N
4 e N
5 f N
6 g N
7 h Y
8 i N
9 j N
'''
b 列 Y 代码数据有异常,但实际上 Y 前一行和后一行均为有异常的数据。
需求为筛选出有异常的数据。
筛选数据最简单的办法是 df[...]
的形式,方括号里边是一个布尔序列,为 True 的表示此行匹配。
在本例中,我们可以用 df.b=='Y'
来筛选出直接为异常的数据,要包含上行和下行,可以使用 shift() 来移位匹配,最后将这些条件用或逻辑连接。
根据思路得到布尔序列为:
df.b=='Y'
'''
0 False
1 True
2 True
3 False
4 False
5 False
6 False
7 True
8 False
9 False
Name: b, dtype: bool
'''
包含所有筛选逻辑:
(df.b=='Y') | (df.b.shift()=='Y') | (df.b.shift(-1)=='Y')
'''
0 True
1 True
2 True
3 True
4 False
5 False
6 True
7 True
8 True
9 False
Name: b, dtype: bool
'''
我们的代码直接为:
df[(df.b=='Y') | (df.b.shift()=='Y') | (df.b.shift(-1)=='Y')]
'''
a b
0 a N
1 b Y
2 c Y
3 d N
6 g N
7 h Y
8 i N
'''
即筛选出了所需要的数据。
(完)
更新时间:2024-08-18 16:06:49 标签:pandas python 筛选