我试着跟随一些已经写好的代码来看看它是如何工作的。在某个点上,作者使用.join()
来统一两个dfs作为一个关系数据库,所以我使用.join()
,而不是merge
,来看看它是如何工作的。据我所知,join
无论如何都要使用merge
。我已经通读了大型的Pandas Merging 101。.join()
文档说on
参数接受索引或列名。我一直无法使列名版本工作。
MWE:
我定义了两个df,它们有一个公共列name
,但顺序不同,所以直接索引连接无法正确组织这些。尝试将.join
与on='name'
一起使用会导致ValueError。我怀疑它试图将一个的索引与另一个的name
进行匹配。我必须使用set_index()
将列name
转换为索引,然后它才能工作。
- 那么,**为什么
.join()
一直坚持使用index,如果文档说我可以提供一个列名呢?
- 那么,**为什么
import pandas as pd
data1 = {
"name": ["Sally", "Mary", "John"],
"age": [50, 40, 30]
}
data2 = {
"contacted": [True, False, False],
"name": ["John", "Mary", "Sally"]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
#newdf = df1.join(df2, on='name', lsuffix='_L', rsuffix='_R') #doesn't work "ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
newdf = df1.join(df2.set_index('name'), on='name', lsuffix='_L', rsuffix='_R')
print(newdf)
1条答案
按热度按时间toe950271#
您可以使用
pd.merge
并对两个 Dataframe 的列名进行左连接,请参见以下代码示例:即使两个 Dataframe 中的列名不同,这也会起作用。