在Pandas中按computer_buy取值统计subject列?值的正确方法
问题解决:统计指定条件下的特定值数量
你的代码报错是因为toy_data['subject'].isnull().sum()会返回一个单个数值(标量),你再用布尔索引[toy_data['computer_buy']=='No']去索引这个标量,自然会触发索引错误——单个数字没法被这样索引。
正确实现分两种情况:
- 如果subject里的
?是实际字符串值:
先筛选出computer_buy为No的行,再统计其中subject等于?的数量:count = (toy_data[toy_data['computer_buy'] == 'No']['subject'] == '?').sum() - 如果
?是用来表示空值的标记:
先把?替换成真正的空值(比如pd.NA),再筛选统计:import pandas as pd # 替换?为标准空值 toy_data['subject'] = toy_data['subject'].replace('?', pd.NA) # 筛选后统计空值数量 count = toy_data[toy_data['computer_buy'] == 'No']['subject'].isna().sum()
原理很简单:先缩小范围到符合computer_buy == 'No'的行,再在这个子集里统计目标值的数量,而不是先统计全量再去索引。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

