无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章

Automapper“IsNull”目标后缀无法正常工作

Vmware下NAT的无法分配网址

虚拟机NAT模式无法联网问题

无法在 AWS 中使用 Iptables 和 Strongswan 对 IP 进行 NAT

针对VMware虚拟机NAT无法使用解决方案——桥接的力量!

AWS Fargate 集群无法使用 NAT 和 Internet 网关访问 Internet [关闭]