Función Pandas pd.Timedelta()
pd.Timedelta()es la función de la biblioteca Pandas utilizada paracrear diferencias de tiempoRepresenta la duración entre dos momentos y se puede utilizar para operaciones de suma y resta de fechas y horas.
Timedelta es una herramienta poderosa para manejar duraciones de tiempo, muy utilizada en escenarios como calcular la diferencia entre dos fechas, agregar o restar una longitud de tiempo específica, etc.
Significado de la palabra: TimedeltaEs la combinación de "time" (tiempo) y "delta" (variación), que significa "incremento de tiempo", es decir, la duración de un período de tiempo.
Sintaxis básica y parámetros
pd.Timedelta()Es una función de nivel superior de la biblioteca Pandas, utilizada para crear objetos de diferencia de tiempo.
Formato de sintaxis
pd.Timedelta(value, unit='ns', **kwargs)
Descripción de parámetros
| Parámetro | Tipo | ¿Obligatorio? | Descripción | Valor por defecto |
|---|---|---|---|---|
| value | string, int, float, datetime.timedelta | Opcional | El valor de diferencia de tiempo a convertir. | None |
| unit | string | Opcional | La unidad cuando value es un valor numérico: 'D' (días), 'h' (horas), 'm' (minutos), 's' (segundos), 'ms' (milisegundos), 'us' (microsegundos), 'ns' (nanosegundos). | 'ns' |
| days | Entero | Opcional | Días. | 0 |
| hours | Entero | Opcional | Horas. | 0 |
| minutes | Entero | Opcional | Minutos. | 0 |
| seconds | Entero | Opcional | Segundos. | 0 |
| milliseconds | Entero | Opcional | Milisegundos. | 0 |
| microseconds | Entero | Opcional | Microsegundos. | 0 |
| nanoseconds | Entero | Opcional | Nanosegundos. | 0 |
Descripción del valor de retorno
- Valor de retorno: Devuelve un objeto Timedelta, que representa un intervalo de tiempo.
- Efecto: Se puede utilizar para operaciones de suma y resta de timestamps, o para calcular la diferencia entre dos momentos.
Ejemplos
A través de una serie de ejemplos de simples a complejos, dominaremos completamentepd.Timedelta()su uso.
Ejemplo 1: Uso básico - Crear una diferencia de tiempo
Ejemplo
# 1. Crear Timedelta con una cadena (string)
print("=== Crear diferencia de tiempo con cadena ===")
td1 = pd.Timedelta('1 days')
print(f"pd.Timedelta('1 days'): {td1}")
td2 = pd.Timedelta('2 hours 30 minutes')
print(f"pd.Timedelta('2 hours 30 minutes'): {td2}")
td3 = pd.Timedelta('1 days 02:30:45')
print(f"pd.Timedelta('1 days 02:30:45'): {td3}")
td4 = pd.Timedelta('2 weeks')
print(f"pd.Timedelta('2 weeks'): {td4}")
# 2. Crear usando parámetros de palabra clave
print("n=== Crear con parámetros de palabra clave ===")
td5 = pd.Timedelta(days=5, hours=10, minutes=30)
print(f"pd.Timedelta(days=5, hours=10, minutes=30): {td5}")
td6 = pd.Timedelta(hours=1.5)
print(f"pd.Timedelta(hours=1.5): {td6}")
# 3. Crear usando valor numérico y unidad
print("n=== Crear con valor numérico y unidad ===")
td7 = pd.Timedelta(10, unit='D')
print(f"pd.Timedelta(10, unit='D'): {td7}")
td8 = pd.Timedelta(30, unit='m')
print(f"pd.Timedelta(30, unit='m'): {td8}")
# 4. Convertir desde datetime.timedelta
print("n=== Convertir desde datetime.timedelta ===")
import datetime
dt_td = datetime.timedelta(days=3, hours=6)
td9 = pd.Timedelta(dt_td)
print(f"Desde datetime.timedelta: {td9}")
# 5. Ver las propiedades de Timedelta
print("n=== Propiedades de Timedelta ===")
td = pd.Timedelta('3 days 12 hours 30 minutes 45 seconds')
print(f"Diferencia de tiempo: {td}")
print(f"Días totales: {td.days}")
print(f"Segundos totales: {td.seconds}")
print(f"Microsegundos totales: {td.microseconds}")
print(f"Segundos totales (incluye decimales): {td.total_seconds()}")
print(f"Convertido a horas: {td.total_seconds() / 3600}")
Resultado de ejecución:
=== 字符串创建时间差 ===
pd.Timedelta('1 days'): 1 days, 0:00:00
pd.Timedelta('2 hours 30 minutes'): 0 days, 2:30:00
pd.Timedelta('1 days 02:30:45'): 1 days 02:30:45
pd.Timedelta('2 weeks'): 14 days, 0:00:00
=== 关键字参数创建 ===
pd.Timedelta(days=5, hours=10, minutes=30): 5 days 10:30:00
pd.Timedelta(hours=1.5): 0 days, 01:30:00
=== 数值和单位创建 ===
pd.Timedelta(10, unit='D'): 10 days, 0:00:00
pd.Timedelta(30, unit='m'): 0 days, 0:30:00
=== 从 datetime.timedelta 转换 ===
从 datetime.timedelta: 3 days 06:00:00
=== Timedelta 属性 ===
时间差: 3 days 12:30:45
总天数: 3
总秒数: 45045
总微秒数: 45000
总秒数 (含小数): 303045.0
84.17916666666667
Análisis del código:
pd.Timedelta()Se admiten múltiples formas de creación: cadena (string), parámetros de palabra clave, valor numérico + unidad, datetime.timedelta.- El formato de cadena es muy flexible, admite '1 days', '2 weeks', '1 days 02:30:45', etc.
total_seconds()El método devuelve el total de segundos (incluida la parte decimal).
Ejemplo 2: Operaciones con diferencias de tiempo
Ejemplo
import numpy as np
# 1. Suma y resta de timestamp y diferencia de tiempo
print("=== Operaciones de timestamp y diferencia de tiempo ===")
ts = pd.Timestamp('2023-01-01 12:00:00')
td = pd.Timedelta(days=5, hours=3)
print(f"Timestamp: {ts}")
print(f"Diferencia de tiempo: {td}")
print(f"ts + td: {ts + td}")
print(f"ts - td: {ts - td}")
# 2. Restar dos timestamps para obtener la diferencia de tiempo
print("n=== Resta de dos timestamps ===")
ts1 = pd.Timestamp('2023-01-15 18:00:00')
ts2 = pd.Timestamp('2023-01-10 09:00:00')
tdiff = ts1 - ts2
print(f"ts1: {ts1}")
print(f"ts2: {ts2}")
print(f"ts1 - ts2: {tdiff}")
print(f"Diferencia en días: {tdiff.days}")
print(f"Diferencia en horas: {tdiff.total_seconds() / 3600}")
# 3. Operaciones entre diferencias de tiempo
print("n=== Operaciones entre diferencias de tiempo ===")
td1 = pd.Timedelta(days=2)
td2 = pd.Timedelta(hours=12)
print(f"td1: {td1}")
print(f"td2: {td2}")
print(f"td1 + td2: {td1 + td2}")
print(f"td1 - td2: {td1 - td2}")
print(f"td1 * 2: {td1 * 2}")
print(f"td1 / 2: {td1 / 2}")
# 4. Operaciones entre diferencia de tiempo y valor numérico
print("n=== Operaciones entre diferencia de tiempo y valor numérico ===")
td = pd.Timedelta(hours=10)
print(f"10 horas * 3 = {td * 3}")
print(f"10 horas / 2 = {td / 2}")
print(f"10 horas // 3 = {td // 3}")
Resultado de ejecución:
=== 时间戳与时间差运算 === 时间戳: 2023-01-01 12:00:00 时间差: 5 days 03:00:00 ts + td: 2023-01-06 15:00:00 ts - td: 2022-12-27 09:00:00 === 两个时间戳相减 === ts1: 2023-01-15 18:00:00 ts2: 2023-01-10 09:00:00 ts1 - ts2: 5 days 09:00:00 天数差: 5 小时差: 129.0 === 时间差之间的运算 === td1: 2 days, 0:00:00 td2: 12:00:00 td1 + td2: 2 days 12:00:00 td1 - td2: 1 day, 12:00:00 td1 * 2: 4 days, 0:00:00 td1 / 2: 1 day, 0:00:00 === 时间差与数值运算 === 10小时 * 3 = 1 day, 3:00:00 10小时 / 2 = 5:00:00 10小时 // 3 = 3:20:00
Análisis del código:
- Un timestamp más una diferencia de tiempo produce un nuevo timestamp.
- La resta de dos timestamps produce una diferencia de tiempo.
- Las diferencias de tiempo se pueden sumar y restar entre sí.
- Las diferencias de tiempo se pueden multiplicar y dividir por valores numéricos.
Ejemplo 3: Uso de diferencias de tiempo en DataFrame
Ejemplo
import numpy as np
# 1. Crear un DataFrame con diferencias de tiempo
print("=== Análisis del tiempo de procesamiento de pedidos ===")
# Simular datos de pedidos
df = pd.DataFrame({
'order_id': ['A001', 'A002', 'A003', 'A004', 'A005'],
'order_time': pd.date_range('2023-01-01 09:00', periods=5, freq='2H'),
'process_time_min': [30, 45, 60, 20, 90]
})
# Convertir el tiempo de procesamiento a Timedelta
df['process_timedelta'] = pd.to_timedelta(df['process_time_min'], unit='m')
# Calcular el tiempo de finalización
df['complete_time'] = df['order_time'] + df['process_timedelta']
print(df)
# 2. Calcular estadísticas de duración del procesamiento de pedidos
print("n=== Estadísticas de duración del procesamiento ===")
total_time = df['process_timedelta'].sum()
avg_time = df['process_timedelta'].mean()
print(f"Tiempo total de procesamiento: {total_time}")
print(f"Tiempo promedio de procesamiento: {avg_time}")
# 3. Calcular el tiempo de vencimiento
print("n=== Calcular el tiempo de vencimiento (asumiendo que el pedido debe completarse en 24 horas) ===")
deadline = pd.Timedelta(hours=24)
df['deadline'] = df['order_time'] + deadline
df['is_ontime'] = df['complete_time'] <= df['deadline']
print(df[['order_id', 'order_time', 'complete_time', 'deadline', 'is_ontime']])
# 4. Filtrar pedidos vencidos
print("n===Pedidos vencidos===")
late_orders = df[~df['is_ontime']]
print(f"Número de pedidos vencidos:{len(late_orders)}")
print(late_orders[['order_id', 'complete_time', 'deadline']])
Resultado de ejecución:
=== 订单处理时间分析 ===
order_id order_time process_time_min complete_time
0 A001 2023-01-01 09:00:00 30 2023-01-01 09:30:00
1 A002 2023-01-01 11:00:00 45 2023-01-01 11:45:00
2 A003 2023-01-01 13:00:00 60 2023-01-01 14:00:00
3 A004 2023-01-01 15:00:00 20 2023-01-01 15:20:00
4 A005 2023-01-01 17:00:00 90 2023-01-01 18:30:00
=== 处理时长统计 ===
总处理时间: 0 days 04:05:00
平均处理时间: 0 days 00:49:00
=== 计算到期时间(假设订单需要在24小时内完成)===
order_id order_time complete_time deadline is_ontime
0 A001 2023-01-01 09:00:00 2023-01-01 09:30:00 2023-01-02 09:00:00 True
1 A002 2023-01-01 11:00:00 2023-01-01 11:45:00 2023-01-02 11:00:00 True
2 A003 2023-01-01 13:00:00 2023-01-01 14:00:00 2023-02-01 13:00:00 True
3 A004 2023-01-01 15:00:00 2023-01-01 15:20:00 2023-02-01 15:00:00 True
4 A005 2023-01-01 17:00:00 2023-01-01 18:30:00 2023-02-01 17:00:00 True
=== 超时订单 ===
超时订单数: 0
Análisis del código:
pd.to_timedelta()Se pueden convertir valores numéricos a Timedelta.- Las diferencias de tiempo se pueden sumar y restar fácilmente con timestamps.
- Se pueden calcular fácilmente estadísticas como el tiempo total de procesamiento, el tiempo promedio de procesamiento, etc.
Notas
Aviso importante:
pd.TimedeltaAlmacena intervalos de tiempo, no momentos de tiempo específicos.- Las diferencias de tiempo pueden ser positivas (futuro) o negativas (pasado).
- y
pd.NaTDe manera similar, existepd.NaTque representa la diferencia de tiempo faltante.- Al usar
unitel parámetro, asegúrese de que el tipo de valor numérico sea correcto.
Otras extensiones
Funciones comunes de Pandas