2016-08-09 31 views
3

我有一個熊貓數據框有46列和6行。pandas更新數據幀的值,如果單元格包含' - '

Index Column1 Column2 Column3 Column4  ... # Cant type all 46 columns. 
2012  5626  fooo  -   barrr 
2013  5655h  booo  -   barr 
2014  5626d  zooo  -   - 
LTM  56   gooo  greed  - 

有沒有辦法對我來說,通過這個數據幀,並更新所有-值是0null值?

我曾嘗試:

for zzz in df.columns: # since df.columns will return me the names of the columns 
    if df_final[zzz].any() == '-': 
     df_final[zzz] = 0 
     print(df_final) 

然而,這只是打印出來的一切,因爲它是。它不會轉換成-0/null

+1

即使你的代碼可以工作,它的錯誤語義也是如此,因爲它會將整列更新爲'0',並且未能顯示代碼段中的'df_final' – EdChum

+0

@jake,建議:避免使用循環。避免編碼你的數據框在循環中工作,這不會得到你的結果。 Python有不同的處理名稱的方式,而且事情從任何地方都不可變。熊貓幾乎總是會返回一份副本,所以任何更改都不會影響父項。使用DataFrame方法。閱讀關於如何做到這一點的熊貓文檔。 – Kartik

回答

4

使用replace替換爲其他一個特定值:

In [71]: 
df.replace('-',0, inplace=True) 
df 

Out[71]: 
    Index Column1 Column2 Column3 Column4 
0 2012 5626 fooo  0 barrr 
1 2013 5655h booo  0 barr 
2 2014 5626d zooo  0  0 
3 LTM  56 gooo greed  0 

你的代碼,即使它已經工作是錯誤的語義:

for zzz in df.columns: 
    if df_final[zzz].any() == '-': 
     df_final[zzz] = 0 
     print(df_final) 

這樣的:df_final[zzz] = 0就已經更新了整列

如果你的代碼是:

for zzz in df.columns: 
    if df_final[zzz].any() == '-': 
     df_final[zzz] = df_final[zzz].replace('-',0) 
     print(df_final) 

那麼這隻會已經替換滿足條件的行,你可以也做:

df.apply(lambda x: x.replace('-',0)) 

更加緊湊的方法

編輯,如果你想更換與NaN然後通過np.NaN而不是0以上。

+1

他可能想根據這個問題用'np.nan'替換它:http://stackoverflow.com/questions/38845435/can-i-create-a-loop-to-update-基本上,他似乎必須建立一個完整的數據處理管道,從抓取Web服務器的數據:http://stackoverflow.com/questions/38810575/merging-dataframes-that-was-obtained-via-網絡抓取到生成的數據框插入到SQL數據庫... – Kartik

+0

@Ed,你的意思是答案... – Kartik

+0

@Kartik是答案,對不起,自動打字的答覆沒有閱讀 – EdChum

3

您可以使用replace

print (df.replace({'-': 0})) 
    Index Column1 Column2 Column3 Column4 
0 2012 5626 fooo  0 barrr 
1 2013 5655h booo  0 barr 
2 2014 5626d zooo  0  0 
3 LTM  56 gooo greed  0 
+0

感謝您的回覆 –

+0

我很好奇。如果可以說'Column1'的值在括號中,例如:'(5626)'。我能否使用'.replace'功能將其改爲'-5626'? –

+0

我認爲是的。最好使用小樣本Dataframe並對其進行測試 - 例如使用'df = pd.DataFrame'{'Column1':['(5626)','aa',''], 'B':[4,5,6], 'C':[7,8 ,9]})' – jezrael

相關問題