Pandas统计各列中?值数量报错:AttributeError: 'DataFrame'无属性'i'
解决方法
首先,你第一个错误确实出在data.i这里——Python会把i当成DataFrame的固定属性名,而不是循环里的变量,所以必须用data[i]来通过变量名索引列。
但改了data[i]还报错的话,大概率是因为某些列里根本没有?,直接用value_counts()["?"]会触发KeyError(因为这个键不存在)。解决这个问题的关键是用字典的get()方法,当找不到?时返回0,避免报错。
修正后的代码如下:
colnames = ['col_1','col_2','col_3'] for i in colnames: count = data[i].value_counts().get("?", 0) print(f'In the {i} feature, the value - ? - occurs {count} times')
另外,如果你想一次性统计所有列的?数量,不用循环也能实现,效率更高:
# 统计每列中?的数量 question_mark_counts = (data == "?").sum() # 打印结果 for col, count in question_mark_counts.items(): print(f'In the {col} feature, the value - ? - occurs {count} times')
这个方法是先把整个DataFrame转换成布尔值(等于?的为True),再对每列求和(True会被当成1计算),比循环调用value_counts更高效,尤其是数据量大的时候。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

