处理美国人口普查数据:按州分组求和遇KeyError,求正确方案
Pandas按州汇总人口时出现KeyError: 'STNAME'的解决方法
问题背景
我正在处理美国人口普查数据,数据包含State(州)、County(县)、population(人口)字段,示例数据如下:
阿拉巴马州 杰斐逊县 658466
阿拉巴马州 莫比尔县 412992
阿拉巴马州 麦迪逊县 334811
阿拉斯加州 安克雷奇市 291826
阿拉斯加州 费尔班克斯北极星自治市镇 97581
阿拉斯加州 马塔努斯卡-苏西特纳自治市镇 88995
期望输出为按州汇总人口,格式如下:
State SumOfPopulation
阿拉巴马州 1406269
阿拉斯加州 478402
但尝试使用代码df.groupby('State')['population'].agg('sum')时,出现KeyError: 'STNAME'错误,请问正确的实现方法是什么?
解决方案
这个错误的核心原因是:你代码里使用的列名和DataFrame实际存储的列名不匹配。报错提示找不到'STNAME',说明你的DataFrame中州名对应的列名其实是'STNAME',而不是你假设的'State'。
你可以先执行下面的代码确认所有列名,避免列名误解:
print(df.columns)
如果确认列名是'STNAME',那么正确的分组汇总代码如下:
方法1:使用sum()并重置索引
# 按州分组汇总人口 state_pop_sum = df.groupby('STNAME')['population'].sum().reset_index() # 重命名列名以匹配期望输出格式 state_pop_sum.columns = ['State', 'SumOfPopulation'] # 查看最终结果 print(state_pop_sum)
方法2:使用agg()方法(效果完全一致)
state_pop_sum = df.groupby('STNAME')['population'].agg('sum').reset_index() state_pop_sum.columns = ['State', 'SumOfPopulation'] print(state_pop_sum)
额外注意事项
如果执行print(df.columns)后发现列名确实是'State',那可能是大小写或拼写细节问题(比如列名是小写的'state'),这时候需要严格匹配列名的大小写和拼写来修改代码。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

