合并数据集后regime列拆分为regime_x和regime_y的原因是什么?
合并后regime列分裂为regime_x/regime_y的原因及解决办法
原因分析
- 你的合并代码中,左右表都包含
regime列,且你通过left_on和right_on分别将其指定为连接键之一。由于pandas默认会保留两个表中名称相同的列(哪怕是连接键),并通过_x(左表)和_y(右表)后缀区分,因此出现了分裂的列。 - 这里无法直接用
on参数统一指定连接键,因为其他键的列名大小写不一致:左表是country、year,右表是Country、Year,pandas会将它们视为不同列。
解决办法
方法1:合并后清理列
合并完成后删除多余列,并将保留列改回原名:
# 删除右表的regime_y列 output1.drop('regime_y', axis=1, inplace=True) # 将regime_x重命名为regime output1.rename(columns={'regime_x': 'regime'}, inplace=True)
方法2:合并时指定后缀再清理
通过suffixes参数设置其中一个后缀为空,后续删除多余列:
output1 = classen_gravity.merge(fdi, how="left", right_on=["Country", "Year", "regime"], left_on=["country", "regime", "year"], suffixes=('', '_drop')) # 删除带_drop后缀的冗余列 output1.drop('regime_drop', axis=1, inplace=True)
方法3:先重命名列再统一键合并
先将右表的列名调整为与左表一致,再用on参数指定共同连接键,合并后自动保留单一regime列:
# 复制右表并重命名列(避免修改原数据) fdi_renamed = fdi.copy().rename(columns={'Country': 'country', 'Year': 'year'}) # 使用统一键合并 output1 = classen_gravity.merge(fdi_renamed, how="left", on=["country", "year", "regime"])
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

