2

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

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

令人困惑的部分是时间戳不等于 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)

返回假。但:

print np.in1d(a_datetimeindex[0:1], a_datetimeindex)
print np.in1d(np.datetime64(a_datetimeindex[0]), a_datetimeindex)

返回正确的结果。

我想这是因为 np.datetime64[ns] 具有纳秒的精度,但是时间戳被截断了?

我的问题是,有没有办法创建 DatetimeIndex 以便它始终索引到相同(或可比较)的数据类型?

4

1 回答 1

2

您正在使用 numpy 函数来操作 pandas 类型。它们并不总是兼容的。

该函数np.in1d首先将其两个参数都转换为 ndarray。ADatetimeIndex具有内置转换,并np.datetime64返回一个 dtype 数组(它是DatetimIndex.values)。但是 aTimestamp没有这样的设施并且它没有被转换。

相反,您可以使用例如 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)
于 2016-07-31T01:19:50.847 回答