看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据清洗中,我们需要删除一定规则的数据。比如,本需求需要删除在一行中包含指定几个字符的数据,但同时又不要求这几个数据一定要在哪几个指定的列中。
我们可以进行判断,把符合条件的行标记出来,再通过筛选操行排队这几行。
根据思路,代码如下(在 pandas 2.2 下完成):
import pandas as pd
df = pd.read_excel('https://gairuo.com/file/data/team.xlsx')
df = df.head()
df
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
假定,我们要匹配的数据为:
selects = ['Liver', 'C', 65]
再下来按我们的思路进行操作:
tag = (
df[['name', 'team', 'Q1']]
.map(lambda x: x in selects)
.any(axis=1)
)
tag
'''
0 True
1 True
2 False
3 True
4 True
dtype: bool
'''
进行反选:
df[~tag]
'''
name team Q1 Q2 Q3 Q4
2 Ack A 57 60 18 84
'''
实现了需求。另外,我们还可以以上思路实现指定列包含一定数据的进行删除操作,如下实现了 'name', 'team'
这两列如果包含了 A 或者 B 则进行删除:
tag = (
df[['name', 'team']]
.apply(lambda x: x.str.contains('A|B', regex=True))
.any(axis=1)
)
tag
'''
0 False
1 True
2 True
3 False
4 False
dtype: bool
'''
df[~tag]
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
这样就完成了需求。
(完)
更新时间:2024-08-18 15:38:18 标签:pandas python 数据清洗