index how from example python dataframe pandas reindex

python - how - set index pandas



pandas reindexar DataFrame con objetos datetime (1)

¿Es posible reindexar un DataFrame pandas usando una columna compuesta de objetos datetime?

Tengo un df DataFrame con las siguientes columnas:

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)

Puedo reindexar el df fácilmente a lo largo de DOYtimestamp con: df.reindex(index=df.dtstamp) y DOYtimestamp tiene los siguientes valores:

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

pero me gustaría volver a indexar el DataFrame a lo largo de dtstamp que está compuesto por objetos de fecha y hora para que genere diferentes marcas de tiempo directamente desde el índice. La columna dtstamp tiene valores que se parecen a:

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

Cuando intento reindexar df junto con dtstamp obtengo lo siguiente:

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

Simplemente no estoy seguro de lo que necesito hacer para que el índice sea de tipo de fecha y hora. ¿Alguna idea?


Parece que no quieres reindexar. Un poco de reindex confusamente no es para definir un nuevo índice, exactamente; más bien, busca filas que tengan los índices especificados. Entonces, si tiene un DataFrame con índice [0, 1, 2] , entonces al hacer un reindex([2, 1, 0]) se devolverán las filas en orden inverso. Hacer algo como reindex([8, 9, 10]) no crea un nuevo índice para las filas; más bien, devolverá un DataFrame con valores NaN , ya que no hay filas con los índices 8, 9 o 10.

Parece que lo que quieres es mantener las mismas filas, pero crea un índice totalmente nuevo para ellas. Para eso, puede asignar el índice directamente. Intenta hacer df.index = df[''dtstamp''] .