[英]Merge two datasets in Pandas
我以前曾與Stata合作,現在正嘗試使用Python完成同樣的工作。 但是,我對合並命令有麻煩。 我一定不知所措。 我要合並的兩個數據框如下所示:
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")
這將合並數據集,但在“股票行情”列中僅給出nan。 我查看了幾個消息源,也許我弄錯了,但是“左”命令對我而言不是正確的做法嗎? 我也嘗試過“正確”和“外部”。 他們沒有得到我想要的結果,並且“內部”似乎在這里通常不起作用。
我是否缺少一些重要的東西?
這是一個問題,您在一個df中的列id
是object
(顯然是string
),另一個是int
,因此沒有匹配項並得到NaN
。
如果具有相同的dtypes
:
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
如果只需要添加一個新列的另一種解決方案是map
:
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
而解決辦法是轉換為int
由astype
(或列id
在df2
到str
):
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.