15

DataFramedatetime オブジェクトで構成された列を使用してパンダのインデックスを再作成することは可能ですか?

df次の列を持つ DataFrameがあります。

Int64Index: 19610 entries, 0 to 19609
Data columns:
cntr                  19610  non-null values  #int
datflt                19610  non-null values  #float
dtstamp               19610  non-null values  #datetime object
DOYtimestamp          19610  non-null values  #float
dtypes: int64(1), float64(2), object(1)

と一緒dfに簡単にインデックスを再作成できます。次の値があります 。DOYtimestampdf.reindex(index=df.dtstamp)DOYtimestamp

>>> df['DOYtimestamp'].values
    array([ 153.76252315,  153.76253472,  153.7625463 , ...,  153.98945602,
    153.98946759,  153.98947917])

しかし、datetime オブジェクトで構成されている DataFramedtstampのインデックスを再作成して、インデックスから直接異なるタイムスタンプを生成したいと考えています。列には次のdtstampような値があります。

 >>> df['dtstamp'].values
     array([2012-06-02 18:18:02, 2012-06-02 18:18:03, 2012-06-02 18:18:04, ...,
     2012-06-02 23:44:49, 2012-06-02 23:44:50, 2012-06-02 23:44:51], 
     dtype=object)

インデックスを再作成しようとするとdfdtstamp次のようになります。

>>> df.reindex(index=df.dtstamp)
    TypeError: can't compare datetime.datetime to long

インデックスを日時型にするために何をする必要があるのか​​ わかりません。何かご意見は?

4

1 に答える 1

27

再インデックスしたくないようです。やや紛らわしいreindexのは、正確には新しいインデックスを定義することではありません。むしろ、指定されたインデックスを持つ行を探します。したがって、 index を持つ DataFrame がある場合、 a を[0, 1, 2]実行するreindex([2, 1, 0])と、行が逆順で返されます。次のようなことをreindex([8, 9, 10])しても、行の新しいインデックスは作成されません。NaNむしろ、インデックス 8、9、または 10 を持つ行がないため、値を含む DataFrame を返します。

あなたが望むのは、同じ行を保持することですが、まったく新しいインデックスを作成することです。そのためには、インデックスに直接割り当てることができます。やってみてくださいdf.index = df['dtstamp']

于 2012-06-08T05:34:25.010 に答える