我分配np.nan
给 DataFrame 列中的缺失值。然后使用 to_csv 将 DataFrame 写入 csv 文件。如果我使用文本编辑器打开文件,则生成的 csv 文件在缺失值的逗号之间没有任何内容。但是当我使用 read_csv 将该 csv 文件读回 DataFrame 时,缺失的值变成了字符串'nan'
而不是 NaN。结果,isnull()
不起作用。例如:
In [13]: df
Out[13]:
index value date
0 975 25.35 nan
1 976 26.28 nan
2 977 26.24 nan
3 978 25.76 nan
4 979 26.08 nan
In [14]: df.date.isnull()
Out[14]:
0 False
1 False
2 False
3 False
4 False
我做错什么了吗?我应该分配一些其他值而不是np.nan
缺失值,以便isnull()
能够拾取吗?
编辑:对不起,忘了提到我还设置了 parse_dates = [2] 来解析该列。该列包含缺少某些行的日期。我希望缺少的行是NaN
.
EIDT:我刚刚发现问题确实是由于 parse_dates 造成的。如果日期列包含缺失值,read_csv 将不会解析该列。相反,它将日期作为字符串读取并将字符串“nan”分配给空值。
In [21]: data = pd.read_csv('test.csv', parse_dates = [1])
In [22]: data
Out[22]:
value date id
0 2 2013-3-1 a
1 3 2013-3-1 b
2 4 2013-3-1 c
3 5 nan d
4 6 2013-3-1 d
In [23]: data.date[3]
Out[23]: 'nan'
pd.to_datetime 也不起作用:
In [12]: data
Out[12]:
value date id
0 2 2013-3-1 a
1 3 2013-3-1 b
2 4 2013-3-1 c
3 5 nan d
4 6 2013-3-1 d
In [13]: data.dtypes
Out[13]:
value int64
date object
id object
In [14]: pd.to_datetime(data['date'])
Out[14]:
0 2013-3-1
1 2013-3-1
2 2013-3-1
3 nan
4 2013-3-1
Name: date
有没有办法让 read_csv parse_dates 处理包含缺失值的列?即,将 NaN 分配给缺失值并仍然解析有效日期?