以下代码出现ValueError: cannot convert float NaN to integer
df = pandas.read_csv('zoom11.csv')
df[['x']] = df[['x']].astype(int)
- “x”是csv文件中的一列,我无法在文件中找到任何float NaN,而且我不明白出现了什么错误或为什么会出现这种错误。
- 当我读取该列为字符串时,它具有像-1、0、1...2000这样的值,对我来说所有值看起来都很好。
- 当我将该列读取为浮点数时,就可以加载。然后它显示的值为-1.0、0.0等,但没有任何NaN。
- 我尝试了使用error_bad_lines = False和read_csv中的dtype参数,但都无济于事。它只是用相同的异常取消了加载。
- 该文件不小(10多M行),因此无法手动检查它。当我提取一个小标题部分时,就不会出现错误,但是完整文件会出现错误。因此,其中有些内容可能存在问题,但我无法确定是什么问题。
- 逻辑上讲,csv文件不应该有丢失的值,但即使出现一些垃圾数据,我也愿意跳过这些行。或者至少识别它们,但我不知道如何扫描文件并报告转换错误。
更新:使用评论/答案中的提示,我成功地清理了我的数据:
# x contained NaN
df = df[~df['x'].isnull()]
# Y contained some other garbage, so null check was not enough
df = df[df['y'].str.isnumeric()]
# final conversion now worked
df[['x']] = df[['x']].astype(int)
df[['y']] = df[['y']].astype(int)
df[df['x'].isnull()]
进行检查。 - jezraelpd.to_numeric
和errors=coerce
,而不是使用 astype int,然后通过fillna
来填充任何你想要的值。 - Bharath M Shetty