【问题标题】:How convert to NaT into NaN in Python如何在 Python 中将 NaT 转换为 NaN
【发布时间】:2020-02-22 11:10:19
【问题描述】:

我有如下数据框

df.head(3)

ORD     Date1                   Date2           
717 2020-03-04T00:00:00Z    2020-03-04T00:00:00Z
722 NaT                     2020-03-15T00:00:00Z
719 2020-05-14T00:00:00Z    NaT

我想将所有的 NaT 转换为 NaN

预期输出

ORD   Date1                   Date2           
717 2020-03-04T00:00:00Z    2020-03-04T00:00:00Z
722 NaN                     2020-03-15T00:00:00Z
719 2020-05-14T00:00:00Z    NaN

如何做到这一点

【问题讨论】:

  • @aepaen,我正要发布同样的问题。我也在等待答案
  • 为什么需要这个?我相信 NaT 的行为与 NaN 相同。
  • @Terry,我有下面的代码只接受 NaN 。我需要转换这个NaT
  • 只有在更改列类型并丢失所有datetime函数时才能这样做
  • @Terry,我可以将其转换为字符串

标签: python-3.x pandas dataframe python-datetime converters


【解决方案1】:

显然在 pandas 中没有必要,因为 NaT 的处理方式类似于 NaNs。

通过小技巧可以实现,但日期时间被转换为对象:

df = df.astype(object).mask(df.isna(), np.nan)
print (df)
   ORD                      Date1                      Date2
0  717  2020-03-04 00:00:00+00:00  2020-03-04 00:00:00+00:00
1  722                        NaN  2020-03-15 00:00:00+00:00
2  719  2020-05-14 00:00:00+00:00                        NaN

print (df.dtypes)
ORD      object
Date1    object
Date2    object
dtype: object

编辑:如果将日期时间转换为字符串,则缺失值 NaT 也是字符串。因此,要将它们替换为NaNs,请使用:

df = df.mask(df == 'NaT', np.nan)

或者:

df = df.replace('NaT', np.nan)

【讨论】:

  • @jerzael,我试过上面提到的代码,它仍然是NaT
  • @aeapen - 你的熊猫版本是什么?
  • @jezrsel,'0.24.2'
  • @aeapen - 我在pandas 0.25.1测试它
猜你喜欢
  • 2018-05-19
  • 2023-01-20
  • 2015-05-12
  • 2018-06-26
  • 2020-02-08
  • 2013-04-26
  • 2019-10-30
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多