簡體   English   中英

無法將數據框與Pandas中的系列合並

[英]Trouble Merging a Dataframe with a Series in Pandas

我遇到了pandas合並功能的一些棘手問題。 這是我的問題的玩具示例:

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

我可能遺漏了一些非常基本的東西,但我懷疑這是有助於了解未來的事情之一!

提前謝謝了。

pd.merge期望DataFrames作為它的前兩個參數。 第二個論點不能是一個系列。 但是,您可以使用其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 您可以控制通過給予一系列列的名稱, s一個名字:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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