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''] .