如何在read_csv中将非数字条目转换为NaN

时间:2016-09-12 09:47:19

标签: python pandas

我正在使用

阅读文件
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的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

如果您未指定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

答案 1 :(得分:2)

这是我对阅读文档的理解:

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问题:

pandas read_csv dtype inference issue

Convert percent string to float in pandas read_csv

最后,pandas.read_csv文档为here