Pandas DatetimeIndex索引dtype:datetime64 vs Timestamp

时间:2016-07-30 17:02:56

标签: python pandas datetimeindex

索引pandas DatetimeIndex(使用dtype numpy datetime64 [ns])返回:

  • 多个索引的另一个DatetimeIndex
  • 单个索引的pandas时间戳

令人困惑的部分是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,以便它始终索引到相同(或类似)的数据类型?

1 个答案:

答案 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)