Дата и время в Pandas

Для работы с временем в Pandas есть тип datetime64[ns] и набор удобных функций: pd.to_datetime для парсинга, .dt для доступа к компонентам (год, месяц, час), resample для пересэмплирования временных рядов.

Когда использовать

  • Лог измерений с временной меткой.

  • Группировка по часу/дню/неделе.

  • Поиск событий в окне ± несколько минут.

Пример 1. Парсинг строки в дату

import pandas as pd

s = pd.Series(["2026-01-15 10:00", "2026-01-15 10:05"])
t = pd.to_datetime(s)
print(t)
print(t.dtype)

Output:

0   2026-01-15 10:00:00
1   2026-01-15 10:05:00
dtype: datetime64[ns]
datetime64[ns]

Пример 2. parse_dates при чтении CSV

import pandas as pd

df = pd.read_csv("log.csv", parse_dates=["timestamp"])
print(df.dtypes)

Output:

timestamp    datetime64[ns]
temp                float64
dtype: object

Пример 3. .dt аксессор

import pandas as pd

t = pd.to_datetime(["2026-01-15 10:30", "2026-02-20 14:45"])
s = pd.Series(t)
print("год:", s.dt.year.tolist())
print("час:", s.dt.hour.tolist())
print("день недели:", s.dt.day_name().tolist())

Output:

год: [2026, 2026]
час: [10, 14]
день недели: ['Thursday', 'Friday']

Пример 4. Временной индекс

import pandas as pd

idx = pd.date_range("2026-01-01", periods=5, freq="D")
df = pd.DataFrame({"v": [10, 12, 11, 13, 15]}, index=idx)
print(df)

Output:

             v
2026-01-01  10
2026-01-02  12
2026-01-03  11
2026-01-04  13
2026-01-05  15

Пример 5. resample

import pandas as pd

idx = pd.date_range("2026-01-01", periods=6, freq="h")
df = pd.DataFrame({"v": [1, 2, 3, 4, 5, 6]}, index=idx)
print(df.resample("3h").sum())

Output:

                     v
2026-01-01 00:00:00   6
2026-01-01 03:00:00  15

Пример 6. Сдвиг по времени

import pandas as pd

t = pd.Timestamp("2026-01-15 10:00")
print(t + pd.Timedelta(hours=2))
print(t + pd.offsets.Day(7))

Output:

2026-01-15 12:00:00
2026-01-22 10:00:00

Пример 7. Разница двух дат

import pandas as pd

s = pd.to_datetime(pd.Series(["2026-01-15 10:00", "2026-01-15 10:05"]))
delta = s.iloc[1] - s.iloc[0]
print("разница:", delta)
print("в секундах:", delta.total_seconds())

Output:

разница: 0 days 00:05:00
в секундах: 300.0

Подводные камни

  • В разных локалях формат «01/02/2026» может быть и январь, и февраль. Указывайте format="%d/%m/%Y" явно.

  • resample требует временного индекса — иначе TypeError.

  • Часовые пояса: tz_localize для «наивных» дат, tz_convert для уже локализованных.

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.