如何用Pandas的iloc按列索引统计指定模式的出现次数?
按列索引统计电子表格中'N/A'的出现次数
现有多份电子表格,缺失值统一用文本'N/A'标记。由于无法提前知晓列名,只能通过列索引统计指定范围内各列的'N/A'出现次数——其中前几列固定,后续列会随表格类型变化。
示例数据
用Pandas构造的示例DataFrame如下:
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'])
需求说明
要实现类似df.iloc[:, 10:].contains('N/A').count()的功能(含取反操作),最终输出类似value_counts的结构化结果,比如针对示例数据中从第2列(索引1)开始的列,统计后输出:
Name 2 Branch 1 Status 4
实现代码
直接用Pandas的iloc选列,配合eq()和sum()就能完成需求:
1. 统计指定列范围的'N/A'次数
比如要统计从第2列(索引1)到最后一列的'N/A'数量:
# 按索引选取目标列 → 判断元素是否为'N/A' → 按列求和统计次数 na_counts = df.iloc[:, 1:].eq('N/A').sum() print(na_counts)
输出结果:
Name 2 Branch 1 Member of 0 Status 4 dtype: int64
2. 取反操作:统计非'N/A'的数量
把判断条件换成ne()(不等于)即可:
non_na_counts = df.iloc[:, 1:].ne('N/A').sum() print(non_na_counts)
输出结果:
Name 2 Branch 3 Member of 4 Status 0 dtype: int64
如果需要调整统计的列范围,只修改iloc里的索引切片就行——比如要统计从第11列(索引10)到末尾,就写df.iloc[:, 10:]。
内容的提问来源于stack exchange,提问作者EA Bubnoff
相关产品推荐
相关产品推荐

