2016-11-13 68 views
1

我有8列和幾個NaN值大的熊貓數據幀:哪一種扁平化熊貓數據框的最有效方法?

0 1 2 3 4 5 6 7 8 
1 Google, Inc. (Date 11/07/2016) NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
2 Apple Inc. (Date 07/01/2016) Amazon (Date 11/01/2016) NaN  NaN  NaN  NaN  NaN  NaN  NaN 
3 IBM, Inc. (Date 11/08/2016)  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
4 Microsoft (Date 11/10/2016)  Google, Inc. (Date 11/10/1990) Google, Inc. (Date 11/07/2016) Samsung (Date 05/02/2016) NaN  NaN  NaN  NaN  NaN 

我怎樣才能拉平下來這樣說:

0 companies 
1 Google, Inc. (Date 11/07/2016) 
2 Apple Inc. (Date 07/01/2016) 
3 Amazon (Date 11/01/2016) 
4 IBM, Inc. (Date 11/08/2016) 
5 Microsoft (Date 11/10/2016) 
6 Google, Inc. (Date 11/10/1990) 
7 Google, Inc. (Date 11/07/2016) 
8 Samsung (Date 05/02/2016) 

我讀了docs,並試圖:

df.iloc[:,0] 

問題是我失去了信息並且在其他列上排序。我想知道如何在沒有丟失數據的情況下平鋪其他單元並訂購?

回答

2

您可以堆疊列並可選擇重置索引。默認情況下,堆棧會丟棄NaN。

df.stack() 
Out: 
0 0 Google, Inc. (Date 11/07/2016) 
1 0  Apple Inc. (Date 07/01/2016) 
    1   Amazon (Date 11/01/2016) 
2 0  IBM, Inc. (Date 11/08/2016) 
3 0  Microsoft (Date 11/10/2016) 
    1 Google, Inc. (Date 11/10/1990) 
    2 Google, Inc. (Date 11/07/2016) 
    3   Samsung (Date 05/02/2016) 
dtype: object 

df.stack().reset_index(drop=True) 
Out: 
0 Google, Inc. (Date 11/07/2016) 
1  Apple Inc. (Date 07/01/2016) 
2   Amazon (Date 11/01/2016) 
3  IBM, Inc. (Date 11/08/2016) 
4  Microsoft (Date 11/10/2016) 
5 Google, Inc. (Date 11/10/1990) 
6 Google, Inc. (Date 11/07/2016) 
7   Samsung (Date 05/02/2016) 
dtype: object 
+0

感謝您的幫助。那麼如果我有興趣將nan空間保存到堆棧中呢?我應該這樣做:'drop = False' – student

+1

該刪除用於刪除索引。相反,你應該使用'df.stack(dropna = False)'來保存NaN。 – ayhan

+0

謝謝,我得到了:'AttributeError:'系列'對象沒有屬性'stack'' – student

1

這可能做的伎倆:

df = pd.DataFrame([ 
     ["Google, Inc. (Date 11/07/2016)", float("NaN")], 
     ["Apple Inc. (Date 07/01/2016)", "Amazon (Date 11/01/2016)"]]) 
unstacked = df.T.unstack() 
unstacked.dropna(inplace=True) 
unstacked.reset_index(drop=True, inplace=True) 
unstacked 

輸出:

0 Google, Inc. (Date 11/07/2016) 
1  Apple Inc. (Date 07/01/2016) 
2   Amazon (Date 11/01/2016) 
dtype: object 

附:請查看this question關於在問題中提供良好熊貓示例。

+0

看來,@艾漢的回答是好。 –

+0

感謝您的幫助。如果我有興趣將nan空間保存到堆棧中,我該怎麼做:'drop = False'? – student

+1

你必須刪除'unstacked.dropna(inplace = True)'行。 –