在Pandas中合并两个数据集

2024-05-13 09:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前曾与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 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。 我看了好几个消息来源,也许我错了,但是“左”的命令对我来说不是正确的吗?我也试过“右”和“外”。他们得不到我想要的结果,“内在”在这里似乎不起作用。

我错过了一些重要的事情吗?


Tags: 数据命令id目标datemergeshellmarket
1条回答
网友
1楼 · 发布于 2024-05-13 09:27:30

问题是你的列id在一个df中是object(显然是string),而在另一个df中是int,所以没有匹配和得到NaN

如果有相同的^{}

print (df1['id'].dtypes)
int64
print (df2['id'].dtypes)
int64

merged = pd.merge(df1, df2, how="left", on="id")
print (merged)
   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

如果只需要添加一个新列,另一个解决方案是^{}

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

溶液通过^{}(或df2中的idstr)转化为int

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

相关问题 更多 >