2017-04-26 71 views
1

定索引假設我有兩個系列:構建大熊貓數據幀從兩個系列

foo = pd.Series([1,2,3]) 
bar = pd.Series([7,6,5]) 

從中我想建立一個數據幀:

tmp = pd.DataFrame() 
tmp['foo'] = foo 
tmp['bar'] = bar 

接下來,我設置了新的數據幀的指數:

tmp.index=range(1,4) 

最終,tmp以這種方式是:

foo bar 
1 1 7 
2 2 6 
3 3 5 

但是,下面的快捷鍵:

pd.DataFrame(
    { 
     "foo": foo, 
     "bar": bar 
    }, 
    index=range(1,4) 
) 

產生如下:

bar  foo 
1 6.0000 2.0000 
2 5.0000 3.0000 
3 nan  nan 

索引是正確的,但價值都沒有。爲什麼它不一樣?如果在創建系列時設置了foobar的索引,則第二種方法有效。

+1

大熊貓做一切與指數對齊。您的系列具有0到2的索引,因此手動組裝數據框時,熊貓將根據這些值對齊系列和新索引。並且,新的數據框將從1到3,系列中的零被刪除,3是NaN,並將int列轉換爲浮點數據類型。來自Pandas文檔[數據對齊是內在的](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#intro-to-data-structures)。 –

+0

@zipa已經爲您的問題提供了一個解決方案,但我仍想提醒您,在大多數Python迭代對象中,索引從0開始,而不是從1開始。因此,對於您的情況,如果將索引從(1, 4)到(0,3),這也給你正確的答案。 –

回答

5

你可以去:

pd.DataFrame(
    { 
     "foo": foo.values, 
     "bar": bar.values 
    }, 
    index=range(1,4) 
) 
+0

與@ScottBoston一起評論答案已完成。 – Dror