【问题标题】:How to create a 'NaT' in Python?如何在 Python 中创建“NaT”?
【发布时间】:2022-01-27 17:19:05
【问题描述】:

我需要在 Python 中创建一个“NaT”(float('NaN') 的类似物,但随着时间的推移)。这可以在 Python 中本地完成还是使用 datetime 库完成?怎么样?

我知道numpypandas 可以做到这一点(或类似的东西),但我觉得如果我需要为此导入一个库,它应该是datetime,而不是numpypandas .

【问题讨论】:

  • 好问题。我看到如何在 pandas 和 numpy 中做到这一点,但不是 datetime
  • NaT 是特定于 numpy datetime dtype,据我所知

标签: python datetime


【解决方案1】:

不幸的是,datetime 似乎不支持这种表示法。查看pandas 中如何实现NaT 的代码,看起来他们创建了一个datetime 类型的类,并通过覆盖操作来插入所需的NaT 行为。这使我相信它在日期时间中不存在,否则他们会使用它。见pandas _NaT class

此输出测试将 pandas 时间戳转换为日期时间进一步证明了这一点。

import pandas as pd

pd.Timestamp('10/2020').to_pydatetime()
Out[2]: datetime.datetime(2020, 10, 1, 0, 0)

pd.Timestamp('NaT').to_pydatetime()
Out[3]: NaT

type(pd.Timestamp('NaT').to_pydatetime())
Out[4]: pandas._libs.tslibs.nattype.NaTType

请注意,NaT 不会产生 datetime.datetime 类型。

总之,您的选择是:

  1. 实现您自己的 NaT 类型的 datetime 类,类似于 pandas(可能很难)。

  2. 使用 numpy。在numpy 中,NaT 可以通过np.datetime64('nat') 找到。关于处理缺失时间的 Numpy 文档。 here

  3. 使用熊猫。在 pandas 中,NaT 可以通过pd.NaT 找到,或者通过时间戳pd.Timestamp('nat') 进行解释。 Pandas 文档中有一个完整的部分关于处理丢失的数据以及如何使用 Datetimes 处理它 here

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2015-04-07
    • 2011-05-20
    • 2019-12-09
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多