2017-07-24 68 views
-1

我有一個分散在其中的數據幀,並且想要將它們全部刪除,所以我只剩下我的數據。熊貓 - 從數據幀中刪除每個NaN

這裏是我的數據框fish_frame的打印輸出:

fish_frame:       0  1  2   3 \ 
0     735-8  NaN  NaN  NaN 
1      NaN  NaN  NaN LIVE WGT 
2     GBE COD  NaN  NaN  600 
3     GBW COD  NaN 11,189  NaN 
4     GOM COD  NaN  0  NaN 
5     POLLOCK  NaN  NaN  1,103 
6     WHAKE  NaN  NaN  12 
7    GBE HADDOCK  NaN 10,730  NaN 
8    GBW HADDOCK  NaN 64,147  NaN 
9    GOM HADDOCK  NaN  0  NaN 
10    REDFISH  NaN  NaN   0 
11   WITCH FLOUNDER  NaN  370  NaN 
12     PLAICE  NaN  NaN  622 
13  GB WINTER FLOUNDER 54,315  NaN  NaN 
14 GOM WINTER FLOUNDER  653  NaN  NaN 
15 SNEMA WINTER FLOUNDER 14,601  NaN  NaN 
16   GB YELLOWTAIL  NaN 1,663  NaN 
17  SNEMA YELLOWTAIL  NaN 1,370  NaN 
18  CCGOM YELLOWTAIL 1,812  NaN  NaN 

          4  6  package_deal_column Package_Price 
0       NaN NaN Package Deal - $40,753.69   nan 
1       NaN TOTAL Package Deal - $40,753.69   nan 
2       NaN NaN Package Deal - $40,753.69   None 
3       NaN NaN Package Deal - $40,753.69   None 
4 Package Deal - $40,753.69 None Package Deal - $40,753.69   None 
5       NaN NaN Package Deal - $40,753.69   None 
6       NaN NaN Package Deal - $40,753.69   None 
7       NaN NaN Package Deal - $40,753.69   None 
8       NaN NaN Package Deal - $40,753.69   None 
9       NaN NaN Package Deal - $40,753.69   None 
10      NaN NaN Package Deal - $40,753.69   None 
11      NaN NaN Package Deal - $40,753.69   None 
12      NaN NaN Package Deal - $40,753.69   None 
13      NaN None Package Deal - $40,753.69   None 
14      NaN None Package Deal - $40,753.69   None 
15      NaN None Package Deal - $40,753.69   None 
16      NaN NaN Package Deal - $40,753.69   None 
17      NaN NaN Package Deal - $40,753.69   None 
18      NaN None Package Deal - $40,753.69   None 

理想的情況下,3列2和4,我想那裏是沒有NaN S和數字代表的所有在一列,而不是三個。

我使用了命令fish_frame = fish_frame.dropna(axis=1, how='all'),但它根本沒有改變數據幀。

任何幫助,將不勝感激謝謝。

+0

你可以上傳文件嗎? – sera

+0

至於最初的來源是什麼,我從這些數據中得到了什麼? – theprowler

+0

是或者只是上傳csv/excel文件 – sera

回答

0
fish_frame.dropna(axis=1, how='any') 

將刪除任何至少有一個NaN的列。

+0

但是會刪除整列,包括所有有價值的數據嗎? – theprowler

+1

@theprowler當然。你不想要NaN。有些東西需要在那裏,無論是NaN還是數字。如果你想保留你的數據,請不要刪除NaN,而是用0或其他替換項替換爲filna() –

0

您需要使用這樣的:

df = pd.read_csv('fish.csv',header = None) 

df_new = df.convert_objects(convert_numeric=True) 

df_new = df_new.fillna(value=0) 

這將替換所有楠字符串以0

然後你就可以添加3列,並獲得1列有所有的號碼,你說。

df_total = df_new[1] + df_new[2] + df_new[3] 

這種方法只適用於你的情況,因爲你沒有在同一列的相同行上的值。

+0

這是一個足夠簡單的任務嗎?我假設我會使用'concatenate'等命令? – theprowler

+0

是的。這可以工作。那麼你可以使用:df_total = df_new [1] + df_new [2] + df_new [3]來添加並獲取一列。然而,只有在同一列中沒有2個值的情況下(這個例子中你發佈它的工作原理),這纔會起作用 – sera

+0

Hmm'TypeError:不支持的操作數類型爲+:'int '和'str''上添加數據幀索引行.. – theprowler

0

在做加法就應該像這樣

df['TotalVal'] = df[[0,1,2]].fillna(0).T.sum() 

df['TotalVal'] = df[[0,1,2]].fillna(0).sum(axis=1) 

...雖然根據您的問題,以及具體的方式中的數據是「奇怪」,我可能真的建議你在之前進行清理這會轉化爲熊貓 - 使用csv模塊創建一組元組並創建數據框會更容易。

我不是專家,花了一段時間來圍繞熊貓範式,但是你必須從功能角度思考(思考結果,而不是過程)並考慮數據的形狀。

在這種情況下,我們需要與原始數據幀具有相同索引的單個系列。首先,提取感興趣的列。由於我們沒有命名索引,爲了確保對齊,我們不想刪除或添加任何數據。我使用fillna只是用一個有效的值替換NaN,而這個值對我選擇的算法來說是沒有用的。

這給了我一個修改後的數據框與3列和我的原始索引。大多數熊貓功能的行動,但我們想要的是每個的總和。因此T轉置數據幀,以便每個是具有3個數據樣本的魚,每個是具有3個數據行的魚。(你也可以直接告訴它總結軸= 1,其描述是從我所瞭解的情況開始的,但軸= 1意味着'總和列'=每行)

然後我們求和它們,對每列進行求和,並且因爲這只是一個數據點,所以也可以將它們摺疊回單個系列。這就是我們想要的,我們可以把它放在數據框中。