Pandas 将数据框中的日期替换为NaT

Pandas 将数据框中的日期替换为NaT,pandas,dataframe,Pandas,Dataframe,我有一个数据框,它的列是datetime64类型。在此列中,有几行的日期为1999-09-09 23:59:59,其中它们实际上应表示为缺失日期NaT。有人刚刚决定用这个特定的日期来表示丢失的数据。现在我希望这些日期被替换为NaT(熊猫丢失的日期类型) 如果我用NAT对这个列执行操作,比如 df['date'] - df['column with missing date'] Pandas会忽略丢失的日期并为这些行维护NaT,还是会抛出一个错误,比如Java中的空指针异常 In [6]: im

我有一个数据框,它的列是datetime64类型。在此列中,有几行的日期为1999-09-09 23:59:59,其中它们实际上应表示为缺失日期NaT。有人刚刚决定用这个特定的日期来表示丢失的数据。现在我希望这些日期被替换为NaT(熊猫丢失的日期类型)

如果我用NAT对这个列执行操作,比如

df['date'] - df['column with missing date']
Pandas会忽略丢失的日期并为这些行维护NaT,还是会抛出一个错误,比如Java中的空指针异常

In [6]:
import pandas as pd
df = pd.DataFrame({'date':[pd.datetime(1999,9,9,23,59,59), pd.datetime(2014,1,1)]* 10})
df
Out[6]:
                  date
0  1999-09-09 23:59:59
1  2014-01-01 00:00:00
2  1999-09-09 23:59:59
3  2014-01-01 00:00:00
4  1999-09-09 23:59:59
5  2014-01-01 00:00:00
6  1999-09-09 23:59:59
7  2014-01-01 00:00:00
8  1999-09-09 23:59:59
9  2014-01-01 00:00:00
10 1999-09-09 23:59:59
11 2014-01-01 00:00:00
12 1999-09-09 23:59:59
13 2014-01-01 00:00:00
14 1999-09-09 23:59:59
15 2014-01-01 00:00:00
16 1999-09-09 23:59:59
17 2014-01-01 00:00:00
18 1999-09-09 23:59:59
19 2014-01-01 00:00:00
In [9]:

import numpy as np
df.loc[df['date'] == '1999-09-09 23:59:59 ', 'date'] = pd.NaT
df
Out[9]:
         date
0         NaT
1  2014-01-01
2         NaT
3  2014-01-01
4         NaT
5  2014-01-01
6         NaT
7  2014-01-01
8         NaT
9  2014-01-01
10        NaT
11 2014-01-01
12        NaT
13 2014-01-01
14        NaT
15 2014-01-01
16        NaT
17 2014-01-01
18        NaT
19 2014-01-01
要回答您的第二个问题,大多数函数都会适当地处理NaN,您可以随时将其删除:

In [10]:

df.dropna()
Out[10]:
         date
1  2014-01-01
3  2014-01-01
5  2014-01-01
7  2014-01-01
9  2014-01-01
11 2014-01-01
13 2014-01-01
15 2014-01-01
17 2014-01-01
19 2014-01-01

只在这些行上执行操作

有些操作,特别是在列之间,不会断开NAN或NAT。这就是为什么你会得到NAT的结果。
如果您想断开1999-09-09 23:59:59的连接,并且还有一个可减去的列,请尝试转换为NAT,然后将NAT与零进行交换(
.fillna(0)
),这样,当减去时,它将保留另一列的值。

确实
df.loc[df['date']='1999-09-09 23:59''date']=pd.NaT
工作?感谢您提供的解决方案。问题是我不想删除这些NaT行,因为我想从另一个日期列中减去这个日期列。它执行此任务,并在原始列中存在NaT的任何位置的结果列中提供NaT值。@user3527975这里的要点是
dropna
不会影响原始数据帧,只有当您重新分配给原始df时才会发生这种情况,如:
df=df.dropna()
df.dropna(inplace=True)