Python DataFrame统计大于50元素总数的方法及合理性分析
问题解答
现有实现的问题
你写的这段代码无法正常运行:df.items()返回的是迭代器,每个元素是(列名, 列数据Series)的二元组,你直接把column传入df[column]相当于把元组当索引查询,会直接抛出KeyError错误。
如果要坚持用循环的写法,正确调整方式为取迭代返回的列名/列数据单独处理:
count = 0 for col_name, col_data in df.items(): count += (col_data > 50).sum()
不过这种循环写法性能很差,数据量越大耗时越高,不推荐使用。
更高效的实现方案
pandas支持向量化的布尔矩阵运算,不需要循环遍历列,一行代码即可完成统计:
# 方法1:兼容性最高,所有pandas版本都支持 total = (df > 50).sum().sum() # 方法2:pandas 0.23及以上版本支持,直接指定axis=None统计所有元素 total = (df > 50).sum(axis=None)
原理说明
- 第一步
df > 50会返回和原DataFrame结构完全一致的布尔矩阵,元素大于50的位置为True,否则为False - 布尔值在pandas运算中会自动转为1(True)和0(False),直接求和就能得到符合条件的总数量,比循环遍历效率高几十到上百倍,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者Louis Seah
相关产品推荐
相关产品推荐

