如何在不使用 Pandas 的情况下创建等效于 numpy.nan 的日期时间对象?
Posted
技术标签:
【中文标题】如何在不使用 Pandas 的情况下创建等效于 numpy.nan 的日期时间对象?【英文标题】:How to create the datetime object equivalent of numpy.nan without using Pandas? 【发布时间】:2019-06-06 04:10:28 【问题描述】:给定一个 numpy 数字数据数组,可以检索与特定条件匹配的数组索引。通过将np.nan
接受为type <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.nan
是type <float>
。下面的示例重现了我的问题的根源:
# attempt to instantiate invalid datetime object
dt2 = datetime.datetime(np.nan, 1, 11, 23, 59, 59)
抛出TypeError: integer argument expected, got float
。正如alternate post 中所建议的那样,有没有办法在不使用熊猫的情况下做到这一点?澄清一下,我的目标是创建一个无效的日期时间对象,使其与有效的日期时间对象相减或相加会返回一个类似 nan 的值。
【问题讨论】:
【参考方案1】:pandas 所做的任何事情通常都是 Numpy 所做的。
在这种情况下,您需要存储正确的类型,不是datetime
,而是np.datetime64
。一旦你有了这个类型,你可以用np.datetime64("NaT")
填充NaT
值,然后使用np.isnat
来测试一个值是否是时间。
datetime
本身不提供“不是时间”的概念,您必须使用提供的类型。您应该能够将np.datetime64
用作datetime
。
【讨论】:
以上是关于如何在不使用 Pandas 的情况下创建等效于 numpy.nan 的日期时间对象?的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:如何在不编写辅助函数的情况下使用 apply 广播操作
如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]
如何在不使用 Qt 内部头文件的情况下压缩 QEvents?
Pandas:如何在不使用 scikit 的情况下进行交叉验证?