当前位置: 首页 > 面试题库 >

熊猫:ValueError:无法将float NaN转换为整数

滕祯
2023-03-14
问题内容

我收到 ValueError:无法将float NaN转换为整数 ,原因如下:

df = pandas.read_csv('zoom11.csv')
df[['x']] = df[['x']].astype(int)
  • “ x”显然是csv文件中的一列,但我无法在文件中发现任何 浮点NaN ,也无法理解其含义。
  • 当我将列读为String时,它的值就像-1,0,1,… 2000,对我来说,它们看起来都非常漂亮。
  • 当我将列读为float时,可​​以加载它。然后它显示值为-1.0,0.0等,仍然没有任何NaN-s
  • 我尝试使用 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)

问题答案:

为了标识NaN值,请使用boolean indexing

print(df[df['x'].isnull()])

然后,要删除所有非数值,请使用to_numeric参数errors='coerce'-将非数值替换为NaNs:

df['x'] = pd.to_numeric(df['x'], errors='coerce')

为了删除列中带有NaNs的所有行,请x使用dropna

df = df.dropna(subset=['x'])

最后将值转换为ints:

df['x'] = df['x'].astype(int)


 类似资料:
  • 问题内容: 我已经读过一个对Pandas的SQL查询,并且值以dtype’object’的形式出现,尽管它们是字符串,日期和整数。我能够将日期“ object”转换为Pandas datetime dtype,但是在尝试转换字符串和整数时遇到错误。 这是一个例子: 将转换为日期时间可以: 但是尝试将转换为整数时出现错误: 注意:我尝试时遇到类似的错误 当尝试转换为字符串时,似乎什么也没有发生。 问

  • 我有一个字段在熊猫DataFrame被导入为字符串格式。它应该是日期时间变量。如何将其转换为日期时间列,然后根据日期进行筛选。 示例: 数据帧名称:原始数据

  • 问题内容: 我正在运行以下python脚本: 但是我得到了类似的错误: 我对此感到困惑。当我在交互式部分中仅尝试一行时,而不是使用脚本进行for循环时: 它运作良好。 有人可以解释一下吗?谢谢。 问题答案: 显然,您的某些行没有有效的float数据,特别是某些行的文本无法转换为float。 当您在交互式提示中尝试它时,您仅尝试第一行,因此最好的方法是在出现此错误的地方打印行,您将知道错误的行,例如

  • 问题内容: 我有一个带有ID号的大型数据框: 这些现在都是字符串。 我想转换为不使用循环-为此我使用。 问题是我的某些行包含无法转换为的脏数据,例如 如何(不使用循环)删除这些类型的事件,以便我可以放心使用? 问题答案: 您需要向功能添加参数: 如果是列: 但非数字会转换为,因此所有值都是。 对于需要转换到一些值,例如,然后转换为: 样品: 编辑:如果使用0.25+大熊猫,则可以使用:

  • 我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。

  • 问题内容: 我对熊猫有些陌生。我有一个熊猫数据框,它是1行乘23列。 我想将其转换为系列吗?我想知道最pythonic的方法是什么? 我试过了,但是抱怨。它不够聪明,无法意识到它仍然是数学上的“向量”。 谢谢! 问题答案: 它不够聪明,无法意识到它仍然是数学上的“向量”。 可以说它足够聪明,可以识别尺寸差异。:-) 我认为您可以做的最简单的事情是使用位置选择该行,这将为您提供一个Series,其列