Dominar fechas y marcas de tiempo en Pandas (y Python en general)
¡Todo lo que necesita para manejar fechas y marcas de tiempo en Pandas! Se proporcionan muchos ejemplos.
Matias Eiletz
4 de marzo de 2020·6 min de lectura
Contenido
- Fechas en general
Más concretamente, operaciones de manipulación con …
- Dias
- Semanas
- Meses
- Años
Extra: Generación de rangos de fechas
- Generar rangos de fechas secuenciales
- Generar rangos de fechas aleatorios
Fechas en general
import pandas as pd
Antes de ejecutar cualquier código, ¡importe pandas!
Ahora, comencemos.
Cambiar el formato de fecha en un DataFrame de columna Puede elegir todos los formatos que desee, siguiendo este sencillo strftime
documentación.
Entonces, por ejemplo, comenzando desde este DataFrame: Cambiar elFormato de fecha
df['date'] = df['date'].apply(lambda x: pd.Timestamp(x).strftime('%Y-%m-%d'))
, con:
df['date'] = df['date'].apply(lambda x: pd.Timestamp(x).strftime('%B-%d-%Y %I:%M %p'))
O podemos ir un poco más exóticos y hacer: Recuerde, todas las variaciones de formatos de marca de tiempo que puede elegir, puede encontrarlas en este enlace:
strftime
df = pd.DataFrame({'date': ['2018-08-09 11:10:55','2019-03-02 13:15:21']})
¡Inténtalo tú mismo! A partir de este DataFrame creado a modo de ejemplo:
# 4 possible options# 1
df['date'] = pd.to_datetime(df['date'])
# 2
df['date'] = df['date'].astype('datetime64[ns]')
# 3
df['date'] = df['date'].apply(lambda x: parse(x))
# 4
df['date'] = df['date'].apply(lambda x: pd.Timestamp(x))
Cambiar el tipo de columna: de Objeto / Cadena a DateTime
df = pd.DataFrame({'date': ['2018-08-09 11:10:55','2019-01-02 13:15:21']})df
df.dtypesdf['date'] = pd.to_datetime(df['date'])
df
df.dtypes
Ejemplo (probamos solo una de las 4 opciones, pero todas deberían funcionar)
Producción:
Pasar del formato de cadena al formato de fecha y del formato de fecha a cadenaExa
from dateutil.parser import parsestr_date = '2018-05-01'# String to Date:
date_1 = parse(str_date)
print ('date_1: ',date_1, type(date_1))# Date to String:
date_2 = date_1.strftime('%Y-%m-%d')
print ('date_2: ',date_2, type(date_2))
mple con variables aisladas:
Producción:
df['date'] = pd.to_datetime(df['date'],unit='s')
De Unix / Epoch time al formato de fecha legible
df = pd.DataFrame({'date': [1349720105,1349806505]})dfdf['date'] = pd.to_datetime(df['date'],unit='s')df
Ejemplo:
Salida (antes y después):
Sumar y restar fechas UsarTimedelta
from datetime import datetime, timedelta
from dateutil.parser import parseparse('2019-04-07') — timedelta(days=3)# or, to get it as a string
(parse('2019-04-07') — timedelta(days=3)).strftime('%Y-%m-%d')
! Ejemplo:
# with date format
datetime.datetime(2019, 4, 4, 0, 0) # with string format
'2019-04-04'
Producción:
Obtén la diferencia entre dos fechas
from dateutil.parser import parsed1 = parse('2018-12-01')
d2 = parse('2018-12-08')
abs((d2 - d1).days)
Convierta ambas cadenas en formato de fecha y luego haga el cálculo. Ejemplo:
7
# 7 days
Producción:
Operaciones con días
# for a column in a DataFrame
from datetime import datetime as dt
df['day'] = df['date'].dt.day# for a single value
from dateutil.parser import parse
parse('2018-08-09').day
Obtener el día de una fecha
9
Producción: