解释pandas DataFrame如何连接起作用

时间:2016-09-28 19:22:13

标签: python python-3.x pandas dataframe

为什么内部联接在熊猫中如此奇怪?

例如:

/note
/note/to
/note/from
/note/heading
/note/body
/note/body/content

输出:

import pandas as pd
import io

t1 = ('key,col1\n'
      '1,a\n'
      '2,b\n'
      '3,c\n'
      '4,d')

t2 = ('key,col2\n'
      '1,e\n'
      '2,f\n'
      '3,g\n'
      '4,h')


df1 = pd.read_csv(io.StringIO(t1), header=0)
df2 = pd.read_csv(io.StringIO(t2), header=0)

print(df1)
print()
print(df2)
print()
print(df2.join(df1, on='key', how='inner', lsuffix='_l'))

如果我没有指定 key col1 0 1 a 1 2 b 2 3 c 3 4 d key col2 0 1 e 1 2 f 2 3 g 3 4 h key_l col2 key col1 0 1 e 2 b 1 2 f 3 c 2 3 g 4 d ,则说明

lsuffix

这个函数与SQL的JOIN有什么不同?为什么要创建带后缀的额外“密钥”列?为什么只有3行? 我希望它输出这样的东西:

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

1 个答案:

答案 0 :(得分:1)

首先要做的事情:
你想要的是合并

df1.merge(df2)

enter image description here

join默认合并index。您可以指定on参数,该参数仅表示左侧的哪一列与右侧的索引匹配。

这些可能有助于说明

df1.set_index('key').join(df2.set_index('key'))

enter image description here

df1.join(df2.set_index('key'), on='key')

enter image description here

您的示例将df2的{​​{1}}索引与[0, 1, 2, 3]的{​​{1}}列key匹配,后面看起来像df1
这就是[1, 2, 3, 4] NaNcol2key_l 4 df1.join(df2, on='key', lsuffix='_l', how='outer')

的原因
{{1}}

enter image description here