Cómo calcular Timedelta en meses en Pandas

La diferencia entre dos fechas u horas se representa como un objeto timedelta. La duración describe la diferencia entre dos fechas, fechas y horas u ocurrencias de tiempo, mientras que el delta significa un promedio de la diferencia. Uno puede estimar el tiempo en el futuro y el pasado usando timedelta. Esta diferencia entre dos fechas cuando se calcula en términos de meses, se denomina delta de tiempo en meses. Demostremos algunas formas de calcular el tiempo delta en meses en pandas.

Método 1: Calcular Timedelta usando la función pandas.Series.dt.to_period()

función pandas.Series.dt.to_period():

Sintaxis:

Series.dt.to_period(*args, **kwargs)

convierte la array de fecha y hora en una array de período.

parámetros

freq= valor opcional, string de desplazamiento u objeto de desplazamiento

En este ejemplo, leemos time.csv y convertimos los valores de cada columna a DateTime. después de convertir columnas a DateTime, usamos pandas.Series.dt.to_period() para calcular el delta de tiempo en meses. La string ‘M’ en la función to_period() simboliza los meses. Se devuelven los objetos de fin de mes. 

CSV utilizado:

Python3

# import packages and libraries
import pandas as pd
 
# reading the csv file
data = pd.read_csv('time.csv')
 
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
 
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M') - \
    data['start_date'].dt.to_period('M')
print(data)

Producción:

Método 2: Calcular Timedelta usando meses en entero

En el método anterior, se devuelve el objeto Monthends. Si queremos que sea un número entero, tenemos que convertirlo usando la función astype() o usando view(dtype=’int64′). 

Python3

# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
 
# reading the csv file
data = pd.read_csv('time.csv')
 
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
 
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M').astype(int) - \
    data['start_date'].dt.to_period('M').astype(int)
 
# print(data)
print(data)

Producción:

Ejemplo 2: Usar .view(dtype=’int64′) para convertir a números enteros

Python3

# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
 
# reading the csv file
data = pd.read_csv('time.csv')
 
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
 
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M').view(dtype='int64') -\
    data['start_date'].dt.to_period('M').view(dtype='int64')
 
# print(data)
print(data)

Producción:

Método 3: Calcular Timedelta utilizando una función definida por el usuario

En lugar de usar funciones integradas, podemos usar nuestra propia función definida por el usuario pd. La función de marca de tiempo() convierte el objeto de tiempo tipo DateTime, str, int o flotante en marca de tiempo. Luego extraemos los valores de año y mes de las marcas de tiempo. como cada año tiene 12 meses multiplicamos 12 con la diferencia de año y sumamos la diferencia de mes. 

Python3

# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
 
# creating a dataframe
data = pd.DataFrame({'startdate': [pd.Timestamp('20181211'),
                                   pd.Timestamp('20180701')],
                     'enddate': [pd.Timestamp('20190612'),
                                 pd.Timestamp('20190712')]})
 
def time_delta_month(end, start):
    return 12 * (end.dt.year - start.dt.year) \
        + (end.dt.month - start.dt.month)
 
print(time_delta_month(data['enddate'], data['startdate']))

Producción:

0     6
1    12
dtype: int64

Publicación traducida automáticamente

Artículo escrito por isitapol2002 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *