2015-10-28 106 views
3

我遇到了熊貓合併功能中的一個棘手問題。這裏是我的問題的玩具例子:在大熊貓中合併數據框與系列的麻煩

df1 = pd.DataFrame({'A': [0, 1, 2, 3], 
        'B': ['B0', 'B1', 'B2', 'B3'], 
        'C': ['C0', 'C1', 'C2', 'C3'], 
        'D': ['D0', 'D1', 'D2', 'D3']}, 
        index=[0, 1, 2, 3]) 

s = pd.Series(['E0', 'E1', 'E2', 'E3'], index = [0,1,2,3]) 

如果我現在要離開了合併這些基於數據幀列A和該系列中的指標,即:

pd.merge(df1,s,how='left', left_on = 'A', right_index = True) 

我得到以下錯誤:

IndexError: list index out of range 

我真的不明白。爲了使事情更混亂,與另一數據框代替系列意味着一切都工作得很好:

df2 = pd.DataFrame({'E': ['E0','E1','E2','E3'], 
        'F': ['F0', 'F1', 'F2', 'F3']}, 
        index=[0, 1, 2, 3]) 

pd.merge(df1,df2,how='left', left_on = 'A', right_index = True) 

給出:

A B C D E F 
0 0 B0 C0 D0 E0 F0 
1 1 B1 C1 D1 E1 F1 
2 2 B2 C2 D2 E2 F2 
3 3 B3 C3 D3 E3 F3 

我可能失去了一些東西很基本的,但我懷疑這是一個那些有助於瞭解未來的事情!

非常感謝提前。

+1

你需要使用'merge'您可以通過給定系列,s名稱控制該列的名字嗎?您可以分配一系列例如'df1 ['E'] = s' – AChampion

回答

3

pd.merge需要DataFrames作爲其前兩個參數。第二個參數不能是一個Series。但是,你可以使用它的方法to_frame轉換s到框架:

In [10]: pd.merge(df1, s.to_frame(), how='left', left_on='A', right_index=True) 
Out[10]: 
    A B C D 0 
0 0 B0 C0 D0 E0 
1 1 B1 C1 D1 E1 
2 2 B2 C2 D2 E2 
3 3 B3 C3 D3 E3 

注意,最後一欄的名字是0

In [15]: s.name = 'Foo' 

然後最後一欄的名字變成Foo

In [17]: pd.merge(df1, s.to_frame(), how='left', left_on='A', right_index=True) 
Out[17]: 
    A B C D Foo 
0 0 B0 C0 D0 E0 
1 1 B1 C1 D1 E1 
2 2 B2 C2 D2 E2 
3 3 B3 C3 D3 E3 
+0

沒有意識到合併需要2個數據幀。非常感謝! –