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

Pandas处理DataFrame时出现KeyError: 'Date'报错如何解决

报错核心原因
  • 列名引用不匹配:你的聚合、透视代码中引用的列名Type 、Date 、Initial 都带有尾部多余空格,和DataFrame实际无后缀空格的列名Type/Date/Initial不一致,是触发KeyError的直接原因。
  • 日期筛选逻辑错误:Series.between()要求传入参数顺序为区间下界、区间上界,你写的df["Date"].between("2022", "2021")下界值大于上界值,会返回全False的布尔序列,最终筛出空数据集,就算修复列名问题也无法得到有效结果。
  • 透视维度错误:你直接使用原始Date列(完整日期格式)做透视列,最终得到的列会是具体日期值,而非你需要的2021、2022年份维度。
修正后完整代码
import pandas as pd

# 1. 统一日期格式,修正筛选区间顺序
df["Date"] = pd.to_datetime(df["Date"])
df = df.loc[df["Date"].between("2021-01-01", "2022-12-31")]

# 2. 按类型、年份分组聚合,去掉所有列名的多余空格
dfx = df.assign(year=df["Date"].dt.year).groupby(['Type', 'year']).agg(
    Initial=lambda x: '/'.join(sorted(x.unique().astype(str))),
    Number='sum'
).reset_index()

# 3. 透视得到分年的数值列
dfy = dfx.pivot(index=['Type', 'Initial'], columns='year', values='Number').reset_index()

# 4. 计算差值,整理输出列顺序
dfy["Difference"] = dfy[2022] - dfy[2021]
result = dfy.rename(columns={2021: "2021", 2022: "2022"})[
    ["Type", "2022", "2021", "Initial", "Difference"]
]
样例数据运行结果

针对你给出的测试数据,最终输出结果完全匹配预期:

Type20222021InitialDifference
Bin2012S/B8

内容的提问来源于stack exchange,提问作者Mr Mann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21