索引pandas DatetimeIndex(使用dtype numpy datetime64 [ns])返回:
令人困惑的部分是Timestamps不等于np.datetime64,所以:
import numpy as np
import pandas as pd
a_datetimeindex = pd.date_range('1/1/2016', '1/2/2016', freq = 'D')
print np.in1d(a_datetimeindex[0], a_datetimeindex)
返回false。但是:
print np.in1d(a_datetimeindex[0:1], a_datetimeindex)
print np.in1d(np.datetime64(a_datetimeindex[0]), a_datetimeindex)
返回正确的结果。
我想这是因为np.datetime64 [ns]的准确度达到纳秒级,但时间戳被截断了吗?
我的问题是,有没有办法创建DatetimeIndex,以便它始终索引到相同(或类似)的数据类型?
答案 0 :(得分:2)
您正在使用numpy函数来操作pandas类型。它们并不总是兼容。
函数np.in1d
首先将其两个参数转换为ndarrays。 DatetimeIndex
有一个内置转化,并返回一个dtype np.datetime64
数组(它是DatetimIndex.values
)。但是Timestamp
没有这样的设施并且没有转换。
相反,您可以使用例如python关键字in
(最自然的方式):
a_datetimeindex[0] in a_datetimeindex
或Index.isin
方法,用于元素集合
a_datetimeindex.isin(a_list_or_index)
如果要使用np.in1d
,请将两个参数显式转换为numpy类型。或者在底层的numpy数组上调用它:
np.in1d(a_datetimeindex.values[0], a_datetimeindex.values)
或者,将np.in1d
与两个相同类型的集合一起使用可能是安全的:
np.in1d(a_datetimeindex, another_datetimeindex)
甚至
np.in1d(a_datetimeindex[[0]], a_datetimeindex)