[英]merging data frames in pandas
pandas.merge在左側和右側的行為不同!!! 對於左側,如果我們一起使用left_on和left_index,則會顯示錯誤,但對於右側相同,則有效!!!
碼:
import pandas as pd
import numpy as np
right = pd.DataFrame(data=np.arange(12).reshape((6,2)),index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],[2001, 2000, 2000, 2000, 2001, 2002]],columns=['event1','event2'])
left = pd.DataFrame(data={'key1':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'key2':[2000, 2001, 2002, 2001, 2002],'data':np.arange(5.)})
pd.merge(left,right,right_index=True,left_index=True,right_on='event1')#it works and returns an empty table which is expected
pd.merge(left,right,left_index=True,right_index=True,left_on='key1')# it makes error !!!
您遇到了一些問題。 首先,您的合並語句構造不正確。 您不應該同時使用left_on
和left_index
或right_on
和right_index
。 您應該只使用一個左選項和一個右選項。
您在第二條語句中出現錯誤的原因是索引級別不匹配。 在您的左合並中,左索引是單個級別,並且您同時指定right_index=True
和right_on='event1'
, right_on
屬性優先。 由於兩者都是單級整數,所以沒有問題。 我應該指出的是,如果合並正確構建,則合並( pd.merge(left, right, left_index=True, right_on='event1', how='left')
)不會產生空的DataFrame ...請參見下面的代碼。
在您的右合並中,您可以指定將右索引與right_index=True
一起使用,並且left_on
的優先級高於left_index=True
。 這里的問題是正確的索引是2個級別,其中您的“ key1”字段是單個級別的字符串。
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: right = pd.DataFrame(data=np.arange(12).reshape((6,2)),index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],[2001, 2000, 2000, 2000, 2001, 2002]],columns=['event1','event2'])
In [4]: left = pd.DataFrame(data={'key1':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'key2':[2000, 2001, 2002, 2001, 2002],'data':np.arange(5.)})
In [5]: left
Out[5]:
data key1 key2
0 0 Ohio 2000
1 1 Ohio 2001
2 2 Ohio 2002
3 3 Nevada 2001
4 4 Nevada 2002
In [6]: right
Out[6]:
event1 event2
Nevada 2001 0 1
2000 2 3
Ohio 2000 4 5
2000 6 7
2001 8 9
2002 10 11
In [5]: left_merge = left.merge(right, left_index=True, right_on='event1', how='left')
In [7]: left_merge
Out[7]:
data key1 key2 event1 event2
Nevada 2001 0 Ohio 2000 0 1
Ohio 2002 1 Ohio 2001 1 NaN
Nevada 2000 2 Ohio 2002 2 3
Ohio 2002 3 Nevada 2001 3 NaN
2000 4 Nevada 2002 4 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.