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