python-3.x - 如何在不使用 Pandas 的情况下创建等效于 numpy.nan 的日期时间对象?
问题描述
给定一个 numpy 数值数据数组,可以检索与特定条件匹配的数组索引。通过接受np.nan
as 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
,我用这个想法来创建一个无效的日期时间对象会很方便。但是, datetime 对象需要 type 的输入<int>
,而np.nan
is type <float>
。下面的示例重新创建了我的问题的根源:
# attempt to instantiate invalid datetime object
dt2 = datetime.datetime(np.nan, 1, 11, 23, 59, 59)
抛出TypeError: integer argument expected, got float
. 有没有办法在不使用熊猫的情况下做到这一点,正如这篇备用帖子中所建议的那样?澄清一下,我的目标是创建一个无效的 datetime 对象,以便它与有效的 datetime 对象相减或相加会返回一个类似 nan 的值。
解决方案
pandas 所做的任何事情通常都是 Numpy 所做的。
在这种情况下,您需要存储正确的类型,不是datetime
,而是np.datetime64
。一旦你有了这个类型,你就可以用它来填充NaT
值,np.datetime64("NaT")
然后用它np.isnat
来测试一个值是否是时间。
datetime
本身不提供“不是时间”的概念,您必须使用提供的类型。您应该能够以np.datetime64
紧密的方式使用datetime
.
推荐阅读
- ios - CLGeocoding,在反向地理编码并从 LAT LONG 获取地址以显示在 tableView 中时面临问题
- flutter - 如何检查和计算骰子满屋
- php - 如何在 SQLSRV PHP 中使用 foreach/for 循环显示数据库 MSSQL 中的数据
- python - 如何在没有 savetxt() 方法的情况下格式化 np 数组?
- php - 请问我如何从这个php代码中station = e.station的数据库中选择?
- python - 生成其中包含固定代码的 python 文件
- excel - excel用户定义函数的#value错误
- flutter - 从上一页重置动画
- kotlin - Kotlin 抽象类必须有构造函数并被初始化
- google-app-engine - 在 GAE Firestore DatastoreException 中启动查询时出错:找不到匹配的索引