熊猫中的连接和合并有什么区别?

假设我有两个这样的数据帧:

left=pd.DataFrame({'key1':['foo','bar'],'lval':[1,2]})
right=pd.DataFrame({'key2':['foo','bar'],'rval':[4,5]})

我想合并它们,所以我尝试以下方法:

pd.merge(左、右、左&u在='key1'上,右&u在='key2'上)

我很高兴

key1 lval key2 rval
0 foo 1 foo 4
1巴2巴5巴

但我正在尝试使用join方法,我一直认为它非常相似

left.join(右,on=['key1','key2'])

我明白了:

//规范(self)中的anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc
406如果self.right\u索引:
407如果不是((len(self.left_on)=self.right.index.nlevels)):
--&燃气轮机;408提出断言错误()
409 self.right_on=[None]*n
410 elif self.right_on不是无:
断言者错误:

我错过了什么

pandas.merge()是用于所有合并/连接行为的基础函数

数据帧提供了pandas.DataFrame.merge()pandas.DataFrame.join()方法,作为访问pandas.merge()功能的便捷方式。例如,df1.merge(right=df2,…)相当于pandas.merge(left=df1,right=df2,…)

以下是df.join()df.merge()之间的主要区别:

  1. 在右表上查找:df1.join(df2)始终通过df2的索引进行连接,但df1.merge(df2)可以连接到df2的一列或多列(默认值)或df2的索引(使用右_index=True
  2. 在左表上查找:默认情况下,df1.join(df2)使用df1df1的索引。merge(df2)使用df1的列。可以通过指定df1.join(df2,on=key\u或\u keys)df1.merge(df2,left\u index=True)来覆盖
  3. 左连接与内部连接:df1.join(df2)默认情况下执行左连接(保留df1的所有行),但df.merge默认情况下执行内部连接(仅返回df1df2的匹配行)

因此,一般的方法是使用pandas.merge(df1,df2)df1.merge(df2)。但对于一些常见情况(保留df1的所有行并连接到df2中的索引),可以使用df1.join(df2)来保存一些键入

有关这些问题的一些说明,请参阅http://pandas.pydata.org/pandas-docs/stable/merging.html#database-样式数据帧连接合并:

merge是pandas命名空间中的一个函数,也是
作为DataFrame实例方法提供,并调用DataFrame
隐式地被认为是联接中的左对象

相关的DataFrame.join方法在内部为
索引上的索引和列上的索引联接,但通过
默认值,而不是尝试连接公共列(默认值
合并)的行为。如果您加入索引,您可能希望
使用DataFrame.join来节省键入的时间

这两个函数调用完全等效:

左。连接(右,开=键或键)
pd.merge(left、right、left\u on=key\u或\u keys,right\u index=True,how='left',sort=False)

发表评论