【问题标题】:read_csv using dtypes but there is na value in columns [duplicate]read_csv 使用 dtypes 但列中没有值 [重复]
【发布时间】:2019-01-30 19:19:50
【问题描述】:

我使用以下代码通过指定每个 col 的类型来读取 csv:

clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names,dtype =col_types)

但它有错误:

ValueError: Integer column has NA values in column 298 

不确定如何跳过 NA?

【问题讨论】:

  • 只导入而不为具有 Null 值的 cols 指定类型。它会解析成你想要的数据类型,如果没有,你可以随时转换它并重写 csv,这样以后读取就不会有任何问题
  • @AndreMotta 谢谢,你能举个例子吗?
  • 检查亚历克西斯的答案...我在我的手机上,不想在这里犯语法错误。

标签: python pandas csv dataframe


【解决方案1】:

熊猫 v0.24+

NumPy or Pandas: Keeping array type as integer while having a NaN value

pandas pre-v0.24

您不能在 int dtype 系列中拥有 NaN 值。这是不可避免的,因为NaN 值被认为是float

import numpy as np
type(np.nan)  # float

您最好将这些列中的内容改为float。如果您随后能够将NaN 值替换为填充值,例如0-1,则可以进行相应处理并转换为int

int_cols = ['col1', 'col2', 'col3']
df[int_cols] = df[int_cols].fillna(-1)
df[int_cols] = df[int_cols].apply(pd.to_numeric, downcast='integer')

混合intfloat 值的替代方案将产生一系列dtype object。不推荐。

【讨论】:

    【解决方案2】:
    clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names)
    clean_pdf_type = (clean_pdf_type.fillna(0)).astype(col_types)
    

    如cmets中所说,不要指定类型,去掉NA再强制转换为某个类型

    【讨论】:

    • 小心。这将适用于整个数据框。 col_types 中定义的类型可能不止一种。
    • 我知道,但是没有更多信息,强制转换为 0 将是查找特定错误的最简单、最快的方法。我们可以根据类型转换 nan 但现在我们只有一个整数错误。如果还有其他任何事情会引起注意,那么可以肯定的是,对数据框进行分离以确保我们不会以相同的方式投射所有内容。
    • 一种更简单、更快捷的方法是了解您的数据并相应地将col_types 更改为float,而不是int(如果适用)。该解决方案基本上是说“让我们查找错误并返回并进行一些更改。”
    • 这正是它所说的:寻找错误,做出改变并从错误中吸取教训。你再完美不过了!
    猜你喜欢
    • 2018-07-03
    • 2014-09-05
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多