Функция Pandas pd.Timedelta()

Pandas 通用函数Pandas: общие функции


pd.Timedelta()используется в библиотеке Pandas длясоздания временных дельт.Эта функция представляет продолжительность между двумя моментами времени и может использоваться для операций сложения и вычитания даты и времени.

Timedelta — это мощный инструмент для работы с продолжительностью времени, обычно используемый в таких сценариях, как вычисление разницы между двумя датами, добавление или вычитание определённых временных интервалов и т. д.

Значение слова: TimedeltaЭто комбинация "time" и "delta" (величина изменения), означающая "приращение времени", то есть длительность периода времени.


Базовый синтаксис и параметры

pd.Timedelta()Это функция верхнего уровня библиотеки Pandas, используемая для создания объектов временных дельт.

Формат синтаксиса

pd.Timedelta(value, unit='ns', **kwargs)

Описание параметра

Параметр Type Обязательный Описание Значение по умолчанию
value String, int, float, datetime.timedelta Optional Значение временной дельты для преобразования. Отсутствует
единица String Optional Единица измерения, когда значение является числом: 'D' (дни), 'h' (часы), 'm' (минуты), 's' (секунды), 'ms' (миллисекунды), 'us' (микросекунды), 'ns' (наносекунды). 'ns'
days Integer Optional Количество дней. 0
hours Integer Optional Количество часов. 0
minutes Integer Optional Количество минут. 0
seconds Integer Optional Количество секунд. 0
milliseconds Integer Optional Количество миллисекунд. 0
микросекунды Integer Optional Количество микросекунд. 0
наносекунды Integer Optional Количество наносекунд. 0

Описание возвращаемого значения

  • Возвращаемое значение: Возвращает объект Timedelta, представляющий временной интервал.
  • Эффект: Может использоваться для операций сложения и вычитания временных меток или для вычисления разницы между двумя моментами времени.

Примеры

Давайте досконально освоим с помощью серии примеров от простых к сложнымpd.Timedelta()его использование.

Пример 1: Базовое использование — создание временной дельты

Примеры

import pandas as pd

# 1. Создание Timedelta с помощью строки
print("=== Создание временной дельты с помощью строки ===")
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. Создание с использованием именованных аргументов
print("n=== Создание с использованием именованных аргументов ===")
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. Создание с использованием числового значения и единицы измерения
print("n=== Создание с использованием числового значения и единицы измерения ===")
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. Преобразование из datetime.timedelta
print("n=== Преобразование из datetime.timedelta ===")
import datetime
dt_td = datetime.timedelta(days=3, hours=6)
td9 = pd.Timedelta(dt_td)
print(f"Из datetime.timedelta: {td9}")

# 5. Просмотр атрибутов Timedelta
print("n=== Атрибуты Timedelta ===")
td = pd.Timedelta('3 days 12 hours 30 minutes 45 seconds')
print(f"Разница времени: {td}")
print(f"Всего дней: {td.days}")
print(f"Всего секунд: {td.seconds}")
print(f"Всего микросекунд: {td.microseconds}")
print(f"Всего секунд (включая десятичную часть): {td.total_seconds()}")
print(f"Преобразовано в часы: {td.total_seconds() / 3600}")

Вывод:

=== 字符串创建时间差 ===
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

Пояснение кода:

  1. pd.Timedelta()Поддерживаются несколько способов создания: строка, именованные аргументы, число + единица измерения, datetime.timedelta.
  2. Строковый формат очень гибкий, поддерживает '1 days', '2 weeks', '1 days 02:30:45' и т. д.
  3. total_seconds()Метод возвращает общее количество секунд (включая десятичную часть).

Пример 2: Операции с временными дельтами

Примеры

import pandas as pd
import numpy as np

# 1. Добавление/вычитание отметки времени и временной дельты
print("=== Операции с отметками времени и временными дельтами ===")
ts = pd.Timestamp('2023-01-01 12:00:00')

td = pd.Timedelta(days=5, hours=3)
print(f"Отметка времени: {ts}")
print(f"Разница времени: {td}")
print(f"ts + td: {ts + td}")
print(f"ts - td: {ts - td}")

# 2. Вычитание двух временных меток для получения временной дельты
print("n=== Вычитание двух временных меток ===")
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"Разница в днях: {tdiff.days}")
print(f"Разница в часах: {tdiff.total_seconds() / 3600}")

# 3. Операции между временными дельтами
print("n=== Операции между временными дельтами ===")
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. Операции между временной дельтой и числовым значением
print("n=== Операции с временной дельтой и числами ===")
td = pd.Timedelta(hours=10)
print(f"10 часов * 3 = {td * 3}")
print(f"10 часов / 2 = {td / 2}")
print(f"10 часов // 3 = {td // 3}")

Вывод:

=== 时间戳与时间差运算 ===
时间戳: 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

Пояснение кода:

  • Добавление дельты времени к временной метке даёт новую временную метку.
  • Вычитание двух временных меток даёт дельту времени.
  • Дельты времени можно складывать друг с другом и вычитать друг из друга.
  • Дельты времени можно умножать и делить на числовые значения.

Пример 3: Использование дельты времени в DataFrame

Примеры

import pandas as pd
import numpy as np

# 1. Создайте DataFrame с дельтой времени
print("=== Анализ времени обработки заказов ===")

# Симуляция данных заказов
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]
})

# Преобразовать время обработки в Timedelta
df['process_timedelta'] = pd.to_timedelta(df['process_time_min'], unit='m')

# Вычислить время завершения
df['complete_time'] = df['order_time'] + df['process_timedelta']

print(df)

# 2. Вычислить статистику продолжительности обработки заказов
print("n=== Статистика продолжительности обработки ===")
total_time = df['process_timedelta'].sum()
avg_time = df['process_timedelta'].mean()
print(f"Общее время обработки: {total_time}")
print(f"Среднее время обработки: {avg_time}")

# 3. Вычислить срок выполнения
print("n=== Вычислить срок выполнения (при условии, что заказ должен быть выполнен в течение 24 часов) ===")
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. Отфильтровать просроченные заказы
print("n===Просроченные заказы===")
late_orders = df[~df['is_ontime']]
print(f"Количество просроченных заказов:{len(late_orders)}")
print(late_orders[['order_id', 'complete_time', 'deadline']])

Вывод:

=== 订单处理时间分析 ===
      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

Пояснение кода:

  • pd.to_timedelta()Числовые значения можно преобразовать в Timedelta.
  • Дельты времени можно удобно добавлять к меткам времени или вычитать из них.
  • Статистические показатели, такие как общее время обработки и среднее время обработки, можно удобно вычислять.

Примечания

Важные примечания:

  • pd.TimedeltaОн хранит временные интервалы, а не конкретные моменты времени.
  • Дельты времени могут быть положительными (будущее) или отрицательными (прошлое).
  • иpd.NaTАналогично существуетpd.NaTкоторый представляет отсутствующую дельту времени.
  • При использованииunitпараметр, убедитесь, что числовой тип указан верно.

Pandas 通用函数Pandas: общие функции

Другие расширения