Tengo un marco de datos de Pandas, una de las columnas contiene cadenas de fecha en el formato YYYY-MM-DD
Por ejemplo '2013-10-28'
Por el momento el dtype
de la columna es object
.
¿Cómo convierto los valores de la columna al formato de fecha Pandas?
df['time'] = [time.date() for time in df['time']]
Esencialmente equivalente a @waitingkuo, pero lo usaría
to_datetime
aquí (parece un poco más limpio y ofrece alguna funcionalidad adicional, por ejemplodayfirst
):Manejo
ValueError
sSi se encuentra en una situación en la que
Lanza un
Eso significa que tiene valores inválidos (no coercibles). Si está de acuerdo con convertirlos a
pd.NaT
, puede agregar unerrors='coerce'
argumento ato_datetime
:fuente
Me imagino que muchos datos ingresan a Pandas desde archivos CSV, en cuyo caso simplemente puede convertir la fecha durante la lectura CSV inicial:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])
donde el 0 se refiere a la columna en la que está la fecha.También puede agregar
, index_col=0
allí si desea que la fecha sea su índice.Ver https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
fuente
Ahora puedes hacer
df['column'].dt.date
Tenga en cuenta que para los objetos de fecha y hora, si no ve la hora en la que todos son 00:00:00, eso no es pandas. Ese es el portátil iPython que intenta que las cosas se vean bonitas.
fuente
df[col] = pd.to_datetime(df[col])
primero para convertir su columna en objetos de fecha y hora.dtype = object
que ocupa considerablemente más memoria que una verdaderadatetime dtype
en pandas.Otra forma de hacer esto y esto funciona bien si tiene varias columnas para convertir a fecha y hora.
fuente
date
solo tenga valores en sus columnas, la conversión a fecha y hora solo retendrá la información pertinente. Si convierte explícitamente el usodf['datetime_col'].dt.date
, resultará en unobject
dtype; Pérdida en la gestión de la memoria.Si desea obtener el formato DATE y no DATETIME:
fuente
Puede darse el caso de que las fechas deban convertirse a una frecuencia diferente. En este caso, sugeriría establecer un índice por fechas.
Después de esto, puede convertir más fácilmente al tipo de formato de fecha que más necesite. A continuación, convierto secuencialmente a varios formatos de fecha, y finalmente termino con un conjunto de fechas diarias al comienzo del mes.
Por brevedad, no muestro que ejecuto el siguiente código después de cada línea anterior:
Esto me da el siguiente resultado:
fuente
Intente convertir una de las filas en una marca de tiempo usando la función pd.to_datetime y luego use .map para asignar el formulario a toda la columna
fuente
fuente
En aras de la integridad, otra opción, que podría no ser la más sencilla, un poco similar a la propuesta por @SSS, pero usando más bien la biblioteca de fecha y hora es:
fuente