gpt4 book ai didi

python - Pandas read_csv 用字符串 'nan' 填充空值,而不是解析日期

转载 作者:太空狗 更新时间:2023-10-30 00:41:14 28 4
gpt4 key购买 nike

我将 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 处理包含缺失值的列? IE。将 NaN 分配给缺失值并仍然解析有效日期?

最佳答案

这是当前解析器中的一个小错误,请参阅:https://github.com/pydata/pandas/issues/3062简单的解决方法是在读入后强制转换该列(并将用 NaT 填充 nans,这是 Not-A-Time 标记,相当于日期时间的 nan)。这应该适用于 0.10.1

In [22]: df
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]: df.dtypes
Out[23]:
value int64
date object
id object
dtype: object

In [24]: pd.to_datetime(df['date'])
Out[24]:
0 2013-03-01 00:00:00
1 2013-03-01 00:00:00
2 2013-03-01 00:00:00
3 NaT
4 2013-03-01 00:00:00
Name: date, dtype: datetime64[ns]

如果字符串 'nan' 确实出现在您的数据中,您可以这样做:

In [31]: s = Series(['2013-1-1','2013-1-1','nan','2013-1-1'])

In [32]: s
Out[32]:
0 2013-1-1
1 2013-1-1
2 nan
3 2013-1-1
dtype: object

In [39]: s[s=='nan'] = np.nan

In [40]: s
Out[40]:
0 2013-1-1
1 2013-1-1
2 NaN
3 2013-1-1
dtype: object

In [41]: pandas.to_datetime(s)
Out[41]:
0 2013-01-01 00:00:00
1 2013-01-01 00:00:00
2 NaT
3 2013-01-01 00:00:00
dtype: datetime64[ns]

关于python - Pandas read_csv 用字符串 'nan' 填充空值,而不是解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157939/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com