Python 合并熊猫中的两个数据集
我以前与Stata合作过,现在正试图用Python完成同样的工作。但是,我对merge命令有问题。不知怎的,我一定错过了什么。我要合并的两个数据帧如下所示:Python 合并熊猫中的两个数据集,python,pandas,merge,Python,Pandas,Merge,我以前与Stata合作过,现在正试图用Python完成同样的工作。但是,我对merge命令有问题。不知怎的,我一定错过了什么。我要合并的两个数据帧如下所示: df1: Date id Market_Cap 2000 1 400 2000 2 200 2001 1 410 2001 2 220 df2: id Ticker 1 Shell 2 ExxonMobil 我现在的目标是获得以下数据集: Date id Market_Cap Ticker 2000
df1:
Date id Market_Cap
2000 1 400
2000 2 200
2001 1 410
2001 2 220
df2:
id Ticker
1 Shell
2 ExxonMobil
我现在的目标是获得以下数据集:
Date id Market_Cap Ticker
2000 1 400 Shell
2000 2 200 ExxonMobil
2001 1 410 Shell
2001 2 220 ExxonMobil
我尝试了以下命令:
merged= pd.merge(df1, df2, how="left", on="id")
这合并了数据集,但在Ticker列中只给出了nan。
我查看了几个来源,可能是我弄错了,但是“left”命令不是为了我的目的而做的正确的事情吗?我也试过“正确”和“外在”。他们没有得到我想要的结果,“内在”似乎在这里一般不起作用
我遗漏了一些重要的东西吗?问题出在一个df中你的列
id
是对象(显然字符串
)和另一个int
,因此没有匹配项和getNaN
如果有相同的:
如果只需要添加一个新列,另一个解决方案是:
模拟您的问题:
print (df1['id'].dtypes)
object
print (df2['id'].dtypes)
int64
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
Date id Market_Cap Ticker
0 2000 1 400 NaN
1 2000 2 200 NaN
2 2001 1 410 NaN
3 2001 2 220 NaN
解决方案通过以下方式转换为int
(df2
中的id
列转换为str
):
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
Date id Market_Cap Ticker
0 2000 1 400 Shell
1 2000 2 200 ExxonMobil
2 2001 1 410 Shell
3 2001 2 220 ExxonMobil
print (df1['id'].dtypes)
object
print (df2['id'].dtypes)
int64
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
Date id Market_Cap Ticker
0 2000 1 400 NaN
1 2000 2 200 NaN
2 2001 1 410 NaN
3 2001 2 220 NaN
df1['id'] = df1['id'].astype(int)
#alternatively
#df2['id'] = df2['id'].astype(str)
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
Date id Market_Cap Ticker
0 2000 1 400 Shell
1 2000 2 200 ExxonMobil
2 2001 1 410 Shell
3 2001 2 220 ExxonMobil