2017-10-13 6 views
1

私はパンダのデータフレームの列に問題があります。データ入力エラーのため、私はtruefalseの列を持っていますが、それには約71の小数も含まれています。パンダのデータフレームの数字を「ナノ」に置き換えてください

私は小数点以下を取り除き、nanに変えようとしていますので、私はこれらの行をさらに解析するために無視することができます。

私は試してみてください。

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

私はエラーを取得する:

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

私は.replaceとしていない成功を収めて論理をも試してみました。

私はここで何が欠けていますか?

+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

浮動小数点値だけを保持する必要がある場合の処理​​ – pyd

+0

@pydこれを使用することができます:' df.col1.astype(str)!= True ')&(df.col1.astype(str)!=' False ')) ' –

0

あなたは列内の各アイテムの種類がBOOLでないかどうかをチェックして、値を変更することができます。

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 
関連する問題