You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理美国人口普查数据:按州分组求和遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:45:32