2

pandas DatetimeIndex (dtype numpy datetime64[ns] を使用) にインデックスを付けると、次のいずれかが返されます。

  • 複数のインデックスの別の DatetimeIndex
  • 単一インデックスの pandas タイムスタンプ

紛らわしい部分は、タイムスタンプが 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 を作成する方法はありますか?

4

1 に答える 1

2

numpy 関数を使用して pandas 型を操作しています。それらは常に互換性があるわけではありません。

この関数np.in1dは、最初に両方の引数を ndarray に変換します。ADatetimeIndexには組み込みの変換があり、dtype の配列np.datetime64が返されます (それは ですDatetimIndex.values)。しかし、 a に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または、同じタイプの 2 つのコレクションで使用するのがおそらく安全です。

np.in1d(a_datetimeindex, another_datetimeindex)

あるいは

np.in1d(a_datetimeindex[[0]], a_datetimeindex)
于 2016-07-31T01:19:50.847 に答える