2017-10-13 95 views
1

我對熊貓數據框上的列有問題。由於數據輸入錯誤,我有一列truefalse,但它也包含大約71個小數。在熊貓數據框中用'nan'替換數字

我想擺脫小數,並把它們變成nan,所以我可以忽略這些行進行進一步分析。

當我嘗試:

datafinal['any_misread'] = datafinal['any_misread'].where(datafinal['any_misread'] < 1, np.nan) 

我得到的錯誤:與.replace,並沒有成功

TypeError: unorderable types: str() < int() 

我也曾嘗試邏輯。

我在這裏錯過了什麼?

+0

你有加入的數據類型?你可以顯示'datafinal ['any_misread']。dtypes' – Wen

回答

2

讓我們嘗試使用whereastype

df = pd.DataFrame({'col1':[True, False, 0.12, True, False, .3]}) 

df.where((df.col1.astype(str) == 'True') | (df.col1.astype(str) == 'False')) 

輸出:

col1 
0 True 
1 False 
2 NaN 
3 True 
4 False 
5 NaN 
+0

當我只需要保留float值時應該怎麼做 – pyd

+0

@pyd你可以使用這個:'df.where((df.col1.astype(str)!=' True')&(df.col1.astype(str)!='False'))' –

0

您可以檢查是否在列中每個項目的類型不是布爾和改變數值。

df = pd.DataFrame([[True],[True],[False],[10.2],[1.0],[False],[0]], columns=['misread']) 
df.misread[df.misread.apply(lambda x: not isinstance(x, bool))] = pd.np.nan 

df 
# returns 
    misread 
0 True 
1 True 
2 False 
3  NaN 
4  NaN 
5 False 
6  NaN