2012-06-08 42 views
12

是否有可能使用由日期時間對象組成的列重建索引DataFrame熊貓用日期時間對象重新索引數據框

我有一個數據幀df有以下的列:

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一起DOYtimestamp有:df.reindex(index=df.dtstamp)DOYtimestamp具有以下值:

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

但我d喜歡重新編制由datetime對象組成的dtstamp DataFrame,以便生成不同的時間戳ps直接從索引。該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) 

當我嘗試和重新索引沿dtstampdf我得到如下:

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

我只是不知道我需要做的景氣指數屬於日期時間類型。有什麼想法嗎?

回答

23

這聽起來像你不想reindex。有點混淆reindex不是爲了定義一個新的索引,相反,它會查找具有指定索引的行。所以如果你有一個索引爲[0, 1, 2]的DataFrame,那麼做一個reindex([2, 1, 0])將以相反的順序返回這些行。做類似reindex([8, 9, 10])的行不會爲行創建新的索引;相反,它會返回一個帶有NaN值的DataFrame,因爲沒有索引爲8,9或10的行。

看起來像你想要的只是保持相同的行,但爲一個完全新的索引他們。爲此,您可以直接指定給索引。所以試着做df.index = df['dtstamp']

+0

謝謝,那正是我所需要的。不知何故,我不清楚我可以將其中一列指定給索引。 – BFTM

+8

你也可以使用'set_index'方法 –