Python 如何在read_csv中将非数字项转换为NaN

Python 如何在read_csv中将非数字项转换为NaN,python,pandas,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的正确方法是什么?这是我阅读文档的理解: def my_func(x): try: converted_value = float(x)

我正在读一个文件

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

这是我阅读文档的理解:

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
参数并传递
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)
就行了

您可以看到
d类型与预期的一样:

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
[5]中的

pd.read_csv(io.StringIO(t),skipinitialspace=True).info()
范围索引:4个条目,0到3
数据列(共3列):
ID_0 4非空对象
ID_1 3非空浮点64
ID_2 4非空对象
数据类型:float64(1),object(2)
内存使用:176.0+字节

看看您可以传递的
转换器
参数。“if x”如何测试它是否可以转换为浮点?我想您只想转换空格。这很容易纠正。天才!谢谢。我认为答案开头的是skipinitialspace,而不是skipinitialwhitespace。