如何从Pandas DataFrame中统计记录总数并解决count返回非数值问题
问题修正方案
你的代码错误出在对count()方法的返回值处理上:pandas里Series.count()/DataFrame.count()返回的本身就是统计非空值的整数,你在count()调用后再次用[classAttribute]取列下标,相当于对整数做索引操作,自然无法得到预期的数值结果。
修正后的可运行代码如下:
def wmc(classAttribute,attribute,training_set): # 统计满足条件的记录数,直接对布尔掩码求和即可 attributeCount = (training_set[classAttribute] == attribute).sum() # 统计目标列的总非空记录数,直接取Series.count()的返回值即可 total = training_set[classAttribute].count() print(f'{attributeCount}/{total}') return attributeCount/total
补充说明:
- 如果你偏好先筛选数据集再统计行数,也可以用
shape[0]实现:attributeCount = training_set[training_set[classAttribute] == attribute].shape[0],空筛选结果也会正常返回0。 - 如果你需要统计包含空值的列总行数,把total的计算逻辑替换为
training_set[classAttribute].shape[0]即可。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

