无法使用isull()过滤NaT

时间:2019-06-26 14:06:58

标签: python pandas

我有一个数据框,其中一列有显着的编号。纳特我正在使用isnull()对其进行过滤,但似乎无法正常工作。我正在尝试将其中一列中的值为空的所有行过滤到另一数据框中。

该列的dtype是datetime。

main['Last Campaign date']

具有以下输出:

0         08-03-2019
1         08-03-2019
2         08-03-2019
3         08-03-2019
4         08-03-2019
5         08-03-2019
6         08-03-2019
7         08-03-2019
8         08-03-2019
9         08-03-2019
10        08-03-2019
11        08-03-2019
12        08-03-2019
13        08-03-2019
14        08-03-2019
15        08-03-2019
16        08-03-2019
17        08-03-2019
18        08-03-2019
19        08-03-2019
20        08-03-2019
21        08-03-2019
22        08-03-2019
23        08-03-2019
24        08-03-2019
25        08-03-2019
26        08-03-2019
27        08-03-2019
28        08-03-2019
29        08-03-2019
             ...    
172801           NaT
172802           NaT
172803           NaT
172804           NaT
172805           NaT
172806           NaT
172807           NaT
172808           NaT
172809           NaT
172810           NaT
172811           NaT
172812           NaT
172813           NaT
172814           NaT
172815           NaT
172816           NaT
172817           NaT
172818           NaT
172819           NaT
172820           NaT
172821           NaT
172822           NaT
172823           NaT
172824           NaT
172825           NaT
172826           NaT
172827           NaT
172828           NaT
172829           NaT
172830           NaT

但是当我使用以下代码时,它输出0

len(main[main['Last Campaign date'].isnull()]) 

我尝试使用:

main.replace('NaT', np.nan)
len(main[main['Last Campaign date'] == np.nan])

它仍然是0。这对我来说似乎很奇怪,我认为这与列的dtype是datetime有关。

2 个答案:

答案 0 :(得分:2)

您可以这样处理:

df[pd.to_datetime(df['Last Campaign date']).isna()]

请注意,使用==的相等声明不能产生使用np.nan的预期结果:

np.nan == np.nan
False

答案 1 :(得分:0)

尝试main['Last Campaign date'].isna().sum() 如果您只是想计算它们。否则,如果您可以使用main.replace(pd.NaT, np.nan)

将nan替换为nan