使用respid索引更新DataFrame后respid列丢失问题排查与修正
问题原因与修复方案
原因
你写的df1.reset_index()没把结果存回df1,也没加inplace=True参数。这就导致df1里的respid依然是索引而非普通列,后续导出Excel时设置了index=False,自然就把respid排除在输出内容之外了。
修复代码
import pandas as pd # 前提:df1和df2已正确定义 df1.set_index(['respid'], inplace=True) df1.update(df2.set_index(['respid'])) # 两种修复方式二选一即可 df1 = df1.reset_index() # 方式1:将重置索引后的新DataFrame赋值给df1 # 或者 df1.reset_index(inplace=True) # 方式2:原地修改df1的索引结构 with pd.ExcelWriter("path" + ".xlsx") as writer: df1.to_excel(writer, sheet_name='sheet2', index=False)
额外说明
reset_index()默认返回一个新的DataFrame,不会修改原DataFrame的结构,必须手动赋值或使用inplace=True才能改变原df的状态。- 两种修复方式效果完全一致,可根据个人代码习惯选择。
内容的提问来源于stack exchange,提问作者Asif Sayed
相关产品推荐
相关产品推荐

