2012-06-08 22 views
12

Tarih öncesi nesnelerden oluşan bir sütun kullanarak pandalar DataFrame yeniden doldurabilir miyim?pandas reindex datetime nesnelerine sahip DataFrame

aşağıdaki sütunlu bir DataFrame df var:

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

ama ben: df.reindex(index=df.dtstamp) ve DOYtimestamp aşağıdaki değerlere sahiptir:

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) 

Birlikte DOYtimestamp boyunca kolayca df reindex edebilirsiniz d DataTrame'i, farklı zaman çizelgesi oluşturacak şekilde datetime nesnelerinden oluşan dtstamp boyunca yeniden dizmek gibi doğrudan dizinden ps.

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

Ben endeksi almak yapmanız gereken sadece emin değilim: Ben şu olsun denemek ve dtstamp boyunca df reindex zaman

>>> 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) 

: dtstamp sütun gibi görünen değerlere sahip datetime türünde olmak. Düşüncesi olan var mı?

cevap

23

Renksiz istemediğiniz gibi geliyor. Biraz kafa karıştırıcı reindex, tam olarak yeni bir endeks tanımlamak için değil; bunun yerine, belirtilen indisleri olan satırları arar. Yani, [0, 1, 2] dizinine sahip bir DataFrame'iniz varsa, reindex([2, 1, 0]) yapmak, sıraları ters sırada döndürecektir. reindex([8, 9, 10]) gibi bir şey yapmak satırlar için yeni bir dizin oluşturmaz; bunun yerine, 8, 9 veya 10 endeksleri olan bir satır olmadığından, NaN değerleri ile bir DataFrame döndürecektir.

İstediğiniz gibi sadece aynı satırları tutmak, ancak tamamen yeni bir dizin oluşturmak için onlar. Bunun için doğrudan dizine atayabilirsiniz. Yani df.index = df['dtstamp'] yapmayı deneyin.

+0

Teşekkürler, tam olarak ihtiyacım olan şey bu. Bir şekilde, sütunlardan birini dizine atayabileceğim net değildi. – BFTM

+8

Ayrıca 'set_index' yöntemini de kullanabilirsiniz. –

İlgili konular