在一个键列上加入两个DataFrame / ERROR:'列重叠但没有指定后缀'

时间:2014-09-24 22:55:58

标签: python sql join pandas syntax-error

我有两张桌子:销售表和产品表和这两个表共享'PART NUMBER'列。 销售表中的“PART NUMBER”列不是唯一的,但在产品表中是唯一的。 (参见销售表和产品表快照的下图)

enter image description here

enter image description here

我试图在销售表上为每个'PART NUMBER'添加等效的'Description',然后我跟随pandas网站上的examples 我的代码

sales.join(part_table, on='PART NUMBER')

但我收到了这个错误:

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

有人可以解释这个错误意味着什么,以及如何解决它?

非常感谢!

1 个答案:

答案 0 :(得分:8)

我认为您想要merge而不是join

sales.merge(part_table)

以下是一个示例数据框:

In [11]: dfa = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

In [12]: dfb = pd.DataFrame([[1, 'a'], [3, 'b'], [3, 'c']], columns=['A', 'C'])

In [13]: dfa.join(dfb, on=['A'])
ValueError: columns overlap but no suffix specified: Index([u'A'], dtype='object')

In [14]: dfa.merge(dfb)
Out[14]:
   A  B  C
0  1  2  a
1  3  4  b
2  3  4  c

从文档中不清楚这是否是故意的(我认为on将用作列)但是如果添加后缀,则遵循例外消息我们可以看到发生了什么:

In [21]: dfb.join(dfa, on=['A'], lsuffix='_a', rsuffix='_b')
Out[21]:
   A_a  C  A_b   B
0    1  a    3   4
1    3  b  NaN NaN
2    3  c  NaN NaN

In [22]: dfb.join(dfa, lsuffix='_a', rsuffix='_b')
Out[22]:
   A_a  C  A_b   B
0    1  a    1   2
1    3  b    3   4
2    3  c  NaN NaN

它忽略了on kwarg并且正在进行连接。