2016-07-30 123 views
1

索引一个大熊猫DatetimeIndex(与D型细胞numpy的datetime64 [NS])返回任一:熊猫DatetimeIndex索引D型细胞:datetime64 VS时间戳

  • 另一个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) 

返回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

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

功能np.in1d首先将其两个参数转换为ndarrays。 A DatetimeIndex具有内置转换,并且返回了一个dtype np.datetime64数组(它是DatetimIndex.values)。但Timestamp没有这样的设施,它没有转换。

相反,你可以使用例如Python关键词in(最自然的方式):

a_datetimeindex[0] in a_datetimeindex 

或元素

a_datetimeindex.isin(a_list_or_index) 

如果你想使用的集合的Index.isin方法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) 
+0

良好,即作品,谢谢! – user3217125