看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 可以对 DataFrame 中的每个值进行逻辑计算,这就要借助于 applymap() 方法。在本例中,我们的数据值中对异常数据已经进行了标记,现在需要计算出有异常标记值的数量。
我们先构造计算数据:
import pandas as pd
data = {
'a': pd.date_range('20220501', periods=5),
'b': [4,'0[异常]',6,7,8],
'c': [9,8,'16[异常]',6,4],
'd': range(5),
}
df = pd.DataFrame(data)
df
'''
a b c d
0 2022-05-01 4 9 0
1 2022-05-02 0[异常] 8 1
2 2022-05-03 6 16[异常] 2
3 2022-05-04 7 6 3
4 2022-05-05 8 4 4
'''
数据中,我们将 0 和 16 进行了异常字样的标注,需求为计算此类数据在整个 DataFrame 中的数量。
先将数据全部转为字符串,以便我们可以进行 str 的 in 操作。利用 applymap() 对每个值计算是否包含「异常」字样。
(
df.astype(str)
.applymap(lambda x: '异常' in x)
)
'''
a b c d
0 False False False False
1 False True False False
2 False False True False
3 False False False False
4 False False False False
'''
在得到的布尔矩阵中,按列计算 True 的数量,利用 sum() 操作时将 True 按 1 计算的特性进行操作,得到一个各列的 True 值数量序列,最后再用一个 sum() 将这些数量加起来:
(
df.astype(str)
.applymap(lambda x: '异常' in x)
.sum()
.sum()
)
# 2
这样就得到了我们需要的数量。
(完)
更新时间:Aug. 18, 2024, 3:59 p.m. 标签:pandas 包含 数量