簡體   English   中英

在熊貓中合並數據框

[英]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_onleft_indexright_onright_index 您應該只使用一個左選項和一個右選項。

您在第二條語句中出現錯誤的原因是索引級別不匹配。 在您的左合並中,左索引是單個級別,並且您同時指定right_index=Trueright_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM