Pandas合并返回带有_x后缀的列名

44 投票
2 回答
68071 浏览
提问于 2025-04-18 03:35

我有两个数据表,df1 有列 A, B, C, D...,而 df2 有列 A, B, E, F...

我想用 A 列里的值来合并这两个数据表。B 列在这两个数据表里也很可能是一样的。因为数据量很大,所以我还没有完全搞清楚所有的内容。

当我执行

pd.merge(df1, df2, on='A')

时,结果里出现了一个叫 B_x 的列。由于数据集很大而且比较复杂,我还没去研究 B_xdf1 里的 B 以及 df2 里的 B 有什么不同。

所以我想问的是:在合并后的数据表中,Pandas 在列名后面加上 _x 是什么意思呢?

相关问题:

2 个回答

3

合并的数据表格不应该有重复的列名。正如EdChum提到的,如果合并后的数据表里出现了 B_x,而不是 B,这就说明原来的两个数据表都有一个叫 B 的列。为了区分,pandas自动给左边的数据表的 B 列加了后缀 _x,而右边的数据表的 B 列则加了后缀 _y

其实,你可以通过给 merge() 函数的 suffixes= 参数传递一个元组,来改变这些后缀的名称。例如:

merged_df = df1.merge(df2, on='A', suffixes=('_left', '_right'))

这样,合并后的数据表 merged_df 就会用 B_left 来代替 B_x。如果你传递空字符串:

df1.merge(df2, on='A', suffixes=('', ''))

你会得到一个类似于以下的ValueError错误提示:

ValueError: columns overlap but no suffix specified: Index(['B'], dtype='object')

这个提示说明发现了重复的列。

撰写回答