Pandas如何用NaT替换NaN?

11

我有一系列数据中包含了一些NaN值,我需要用NaT值来替换它们。请问我该如何实现?

这里是一个简单的示例,展示了我尝试过的方法:

>>> s = pd.Series([np.NaN, np.NaN])
>>> s.fillna(pd.NaT)
0   NaN
1   NaN
dtype: float64
>>> s.replace(np.NaN, pd.NaT)
0   NaN
1   NaN
dtype: float64
>>> s.where(pd.notnull(s), pd.NaT)
0    NaN
1    NaN
dtype: object

pandas 版本: 0.16.2

numpy 版本: 1.9.2

python 版本: 2.7.10


使用 Pandas v0.18.0,第三个s.where可以正常工作。 - Tadhg McDonald-Jensen
你的第三个应该是s.where(pd.isnull(s), pd.NaT),但在0.18.0上无法运行。 - EdChum
1个回答

13

首先将 dtype 转换为 float,因为当初始的 dtypefloat 时,NaT 没有意义:

In [90]:
s.astype(np.datetime64).fillna(pd.NaT)

Out[90]:
0   NaT
1   NaT
dtype: datetime64[ns]

如果在Series中有非NaN值,则使用to_datetime

In [97]:
s = pd.Series([np.NaN, np.NaN, 1.0])
pd.to_datetime(s)

Out[97]:
0                             NaT
1                             NaT
2   1970-01-01 00:00:00.000000001
dtype: datetime64[ns]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接