如何在Pandas中将DataFrame统计信息及指定模式计数存入字典?
解决方法
当然可以实现这个需求,不过你的现有代码存在两个问题:
- 没必要用
df.iterrows()循环——统计是针对整个DataFrame的全局计算,逐行遍历会重复执行相同计算,完全冗余。 - 你写的
df[df.columns[0]] == 'N/A'返回的是布尔值组成的Series,不是次数统计结果,需要用.sum()将布尔值(True=1,False=0)求和得到计数。
正确实现代码
import pandas as pd df = pd.DataFrame([[1000, 'Jerry', 'BR1','BR1','N/A'], [1001, 'N/A', 'N/A', 'BR1','N/A'], ['N/A', 'N/A', 'BR3', 'BR2','N/A'], [1003, 'Perry','BR4','BR1','N/A']], columns=['ID', 'Name', 'Branch', 'Member of','Status']) # 直接构建统计字典,无需循环 first_col = df[df.columns[0]] new_dict = { 'rows': len(df.index), 'col1': first_col.count(), # 统计第一列非NaN的条目数(注意:字符串'N/A'不算NaN,会被计入) '# of NA': (first_col == 'N/A').sum(), '# NOT NA': (first_col != 'N/A').sum() # 或者用 len(df) - new_dict['# of NA'] 更高效 } print(new_dict)
输出结果
{'rows': 4, 'col1': 4, '# of NA': 1, '# NOT NA': 3}
补充说明
first_col.count():这里的count()方法统计的是非NaN值的数量,由于你的数据中'N/A'是字符串类型,不是真正的缺失值(NaN),所以会被计入统计。如果需要排除字符串'N/A',可以改用(first_col != 'N/A').sum(),和# NOT NA的结果一致。- 用
len(df.index)或df.shape[0]都可以获取总行数,效果相同。
内容的提问来源于stack exchange,提问作者EA Bubnoff
相关产品推荐
相关产品推荐

