Pandas如何遍历列将受访者归入对应收入区间统计?
解决方法
你报错的核心原因是初始化了列表(如low_inc = [])却执行+=1操作——列表的+=要求传入可迭代对象(比如另一个列表),但整数1不属于可迭代类型,因此触发'int' object is not iterable错误。另外还要注意样本中收入字符串的格式差异(比如部分区间没有$、减号是全角−),和你代码里的判断字符串不匹配会导致统计结果不准确。
方案一:修正原循环代码
把列表改成整数计数器,并匹配样本实际的字符串格式:
df3 = df_hif.dropna(subset=['Household Income', 'fan'], how='any') # 初始化整数计数器替代列表 low_inc = 0 lowmid_inc = 0 mid_inc = 0 midhigh_inc = 0 high_inc = 0 for inc in df3['Household Income']: # 匹配样本中存在的两种格式(带$和不带$、全角/半角减号) if inc == '$0 - $24,999' or inc == '0− 24,999': low_inc += 1 elif inc == '$25,000 - $49,999' or inc == '25,000− 49,999': lowmid_inc += 1 elif inc == '$50,000 - $99,999' or inc == '50,000− 99,999': mid_inc += 1 elif inc == '$100,000 - $149,999' or inc == '100,000− 149,999': midhigh_inc += 1 elif inc == '$150,000+' or inc == '150,000+': high_inc += 1 print("低收入区间人数:", low_inc) print("中低收入区间人数:", lowmid_inc) print("中等收入区间人数:", mid_inc) print("中高收入区间人数:", midhigh_inc) print("高收入区间人数:", high_inc)
方案二:更高效的Pandas内置方法
避免手动循环,用Pandas原生函数实现统计:
方法1:直接统计原收入区间频次
如果不需要合并分组,直接用value_counts()快速统计:
df3 = df_hif.dropna(subset=['Household Income', 'fan'], how='any') income_counts = df3['Household Income'].value_counts() print(income_counts)
方法2:映射为自定义分组后统计
如果需要将原区间合并为你定义的low_inc等分组,用map映射后再统计:
df3 = df_hif.dropna(subset=['Household Income', 'fan'], how='any') # 定义原收入区间到自定义分组的映射关系 income_mapping = { '$0 - $24,999': 'low_inc', '0− 24,999': 'low_inc', '$25,000 - $49,999': 'lowmid_inc', '25,000− 49,999': 'lowmid_inc', '$50,000 - $99,999': 'mid_inc', '50,000− 99,999': 'mid_inc', '$100,000 - $149,999': 'midhigh_inc', '100,000− 149,999': 'midhigh_inc', '$150,000+': 'high_inc', '150,000+': 'high_inc' } # 添加新列存储自定义分组 df3['income_group'] = df3['Household Income'].map(income_mapping) # 统计每个分组的人数 group_counts = df3['income_group'].value_counts() print(group_counts)
内容的提问来源于stack exchange,提问作者FutureDataScientist
相关产品推荐
相关产品推荐

