无法使用 isnull() 过滤 NaT
Posted
技术标签:
【中文标题】无法使用 isnull() 过滤 NaT【英文标题】:Unable to filter NaT using isnull() 【发布时间】:2019-11-08 12:22:45 【问题描述】:我有一个数据框,其中一列有重要编号。纳特。我正在使用 isnull() 过滤它们,但它似乎不起作用。我正在尝试将一列中的值为空的所有行过滤到另一个数据框中。
列的数据类型是日期时间。
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 有关。
【问题讨论】:
换成len(main[main['Last Campaign date'].eq('NaT')])
怎么样
main['Last Campaign date']
的 dtype 是什么?
dtype 是日期时间
你厌倦了使用 is.na() 吗?
.isnull() 不带参数。
【参考方案1】:
你可以这样做:
df[pd.to_datetime(df['Last Campaign date']).isna()]
请注意,使用==
的相等断言不会产生使用np.nan
的预期结果:
np.nan == np.nan
False
【讨论】:
这就是我认为的问题所在。【参考方案2】:试试main['Last Campaign date'].isna().sum()
如果你只是想计算它们。否则,如果您可以使用 main.replace(pd.NaT, np.nan)
将 NaT 替换为 nan
【讨论】:
以上是关于无法使用 isnull() 过滤 NaT的主要内容,如果未能解决你的问题,请参考以下文章
无法在 AWS 中使用 Iptables 和 Strongswan 对 IP 进行 NAT