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"] ]
样例数据运行结果
针对你给出的测试数据,最终输出结果完全匹配预期:
| Type | 2022 | 2021 | Initial | Difference |
|---|---|---|---|---|
| Bin | 20 | 12 | S/B | 8 |
内容的提问来源于stack exchange,提问作者Mr Mann
相关产品推荐
相关产品推荐

