python-3.x - 如何在不使用 Pandas 的情况下创建相当于 numpy.nan 的日期时间对象?

标签 python-3.x numpy datetime nan

给定一个 numpy 数值数据数组,可以检索匹配特定条件的数组索引。通过接受 np.nantype <float> ,这些条件还是可以满足的。我想使用类似的方法使用日期时间对象而不是数字数据。

例如,请考虑以下情况:

import numpy as np
import datetime

# sample data
x = np.linspace(-5, 5, 11).astype(int)
y = x**2
z = y.copy().astype(float)
z[0] = np.nan

# check that nan condition is correctly satisfied
print("\nZ:\n{}\n".format(z))
print("\nZ > 0:\n{}\n".format(z > 0))
print("\nZ < 0:\n{}\n".format(z < 0))
print("\nZ = 0:\n{}\n".format(z == 0))

# get number of elapsed hours between two datetime objects
dt0 = datetime.datetime(2018, 1, 11, 23, 59, 59)
dt1 = datetime.datetime(2018, 1, 12, 23, 59, 59)
hr_delta = (dt1 - dt0).total_seconds() // 3600
print("\n{} - {} = {} hours".format(dt1, dt0, hr_delta))

np.nan - 5 = np.nan ,我用这个想法来创建一个无效的日期时间对象会很方便。但是,日期时间对象需要类型为 <int> 的输入, 而 np.nantype <float> .下面的例子重现了我的问题的根源:
# attempt to instantiate invalid datetime object
dt2 = datetime.datetime(np.nan, 1, 11, 23, 59, 59)

抛出 TypeError: integer argument expected, got float .有没有办法在不使用 Pandas 的情况下做到这一点,正如这个 alternate post 中所建议的那样?只是为了澄清,我的目标是创建一个无效的日期时间对象,使其与有效日期时间对象的减法或加法返回类似 nan 的值。

最佳答案

pandas 所做的任何事情通常都是 Numpy 所做的。

在这种情况下,您需要存储正确的类型,而不是 datetime ,但是 np.datetime64 .有了这个类型就可以填写NaT值与 np.datetime64("NaT")然后使用 np.isnat测试是否为时间值。
datetime本身不提供“不是时间”的概念,您必须使用提供的类型。您应该可以使用 np.datetime64以一种接近的方式作为 datetime .

关于python-3.x - 如何在不使用 Pandas 的情况下创建相当于 numpy.nan 的日期时间对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143102/

相关文章:

python - numpy 数组列表到坐标点列表的转换

python - 将抓取的列表添加到 Pandas Dataframe

python - 如果最后 N 个元素为 0 且为常量,则删除它们

python - 用不同数组的条目替换数组的条目

c++ - Boost 解析日期/时间字符串并产生 .NET 兼容的 Ticks 值

javascript - 从城市派生时区

Python tkinter rowspan 无法正确调整元素大小

python - 为什么Python3守护线程在控制台中立即关闭?

python - 从 pandas Dataframe 列创建列表的高效/Pythonic 方法

php - 如何判断一个时区是否在一年中的任何时间遵守夏令时?