Pandas追加DataFrames时出现索引不匹配问题如何解决
问题根源
- 第一,
set_index方法默认不修改原DataFrame,你执行df_dict['Empty_Parishes'].set_index('PARISH')后没有将结果赋值回原变量,所以Empty_Parishes的索引仍然是默认的数字RangeIndex,PARISH还保留为普通列,和透视表Parish_Totals的索引结构不匹配。 - 第二,
pd.pivot_table同时指定values和columns参数时,生成的是多级列名,结构为(values名, Covenant Area名),但你手动构造的Empty_Parishes是单级列名,列名不匹配会导致append后数据错位。
解决方案
方案1:修正现有代码
- 先将透视表的多级列名压平为你定义的单级格式:
# 把列名从 (AP, POS) 转为 POS_AP,和你定义的column_heads匹配 df_dict['Parish_Totals'].columns = [f'{col[1]}_{col[0]}' for col in df_dict['Parish_Totals'].columns]
- 修正set_index的赋值逻辑:
# 赋值回原变量,索引才会生效 df_dict['Empty_Parishes'] = df_dict['Empty_Parishes'].set_index('PARISH')
- 合并两个表(高版本pandas已弃用append,推荐用concat):
df_dict['NEW'] = pd.concat([df_dict['Parish_Totals'], df_dict['Empty_Parishes']])
方案2:更简洁的reindex方法(无需手动构造空行)
不需要循环筛选缺失教区、构造空行,直接对透视表执行重索引操作,一步补全所有教区数据:
# 先压平透视表列名 df_dict['Parish_Totals'].columns = [f'{col[1]}_{col[0]}' for col in df_dict['Parish_Totals'].columns] # 用全量教区列表重索引,缺失值自动填0 df_dict['NEW'] = df_dict['Parish_Totals'].reindex(all_parishes, fill_value=0)
内容的提问来源于stack exchange,提问作者GlassShark1
相关产品推荐
相关产品推荐

