我正在使用
阅读文件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的正确方法是什么?
答案 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