我对pandas数据框中的列有问题。由于数据输入错误,我有一个true
和false
的列,但它也包含大约71个小数。
我试图摆脱小数并将其转换为nan
,以便我可以忽略这些行以进行进一步分析。
当我尝试:
datafinal['any_misread'] = datafinal['any_misread'].where(datafinal['any_misread'] < 1, np.nan)
我收到错误:
TypeError: unorderable types: str() < int()
我还尝试过使用.replace
的逻辑但没有成功。
我在这里缺少什么?
答案 0 :(得分:2)
让我们尝试使用where
和astype
:
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
答案 1 :(得分: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