假设我有两个这样的数据帧:
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()之间的主要区别:
- 在右表上查找:
df1.join(df2)始终通过df2的索引进行连接,但df1.merge(df2)可以连接到df2的一列或多列(默认值)或df2的索引(使用右_index=True) - 在左表上查找:默认情况下,
df1.join(df2)使用df1和df1的索引。merge(df2)使用df1的列。可以通过指定df1.join(df2,on=key\u或\u keys)或df1.merge(df2,left\u index=True)来覆盖 - 左连接与内部连接:
df1.join(df2)默认情况下执行左连接(保留df1的所有行),但df.merge默认情况下执行内部连接(仅返回df1和df2的匹配行)
因此,一般的方法是使用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)