【问题标题】:How to convert non-numeric entries to NaN in read_csv如何在 read_csv 中将非数字条目转换为 NaN
【发布时间】:2017-01-19 17:29:19
【问题描述】:

我正在阅读一个文件:

pd.read_csv("file.csv", dtype={'ID_1':float})

文件如下:

ID_0, ID_1,ID_2
a,002,c
b,004,d
c,   ,e       
n,003,g

不幸的是,read_csv 未能抱怨它无法将 ' ' 转换为浮点数。

读取 csv 并将无法转换为浮点数的任何内容转换为 NaN 的正确方法是什么?

【问题讨论】:

标签: python pandas csv nan converters


【解决方案1】:

这是我阅读文档的理解:

def my_func(x):
    try:
        converted_value = float(x)
    except ValueError:
        converted_value = 'NaN'
    return converted_value

pd.read_csv("file.csv", dtype={'ID_1':float}, converters={'ID_1':my_func})

(由于我现在在工作,无法访问pandas,我无法告诉你它是否有效,但它看起来应该(每个程序员都说过..))

另请参阅这些相关的 SO 问题:

【讨论】:

  • 我虽然只想转换空白。这很容易纠正。
【解决方案2】:

如果您不指定 dtype 参数并传递 skipinitialspace=True 那么它就可以工作:

In [4]:
t="""ID_0,ID_1,ID_2
a,002,c
b,004,d
c,   ,e
n,003,g"""

pd.read_csv(io.StringIO(t), skipinitialspace=True)
Out[4]:
  ID_0  ID_1 ID_2
0    a   2.0    c
1    b   4.0    d
2    c   NaN    e
3    n   3.0    g

所以在你的情况下:

pd.read_csv("file.csv", skipinitialspace=True)

会正常工作

您可以看到dtypes 符合预期:

In [5]:
pd.read_csv(io.StringIO(t), skipinitialspace=True).info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
ID_0    4 non-null object
ID_1    3 non-null float64
ID_2    4 non-null object
dtypes: float64(1), object(2)
memory usage: 176.0+ bytes

【讨论】:

  • 我认为这是答案开头的skipinitialspace而不是skipinitialwhitespace。
猜你喜欢
  • 2016-11-26
  • 2020-10-24
  • 2013-01-21
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多