Как мне получить разобранный смещение часового пояса при разборе строк с учетом часового пояса с помощью Polars?

Вопрос или проблема

При использовании Polars для парсинга строк даты и времени с информацией о смещении, выходные данные всегда будут в UTC:

pl.Series(['2020-01-01T01:00+10:00']).str.to_datetime()
shape: (1,)
Series: '' [datetime[μs, UTC]]
[
        2019-12-31 15:00:00 UTC
]

Я предполагаю, что причина этого заключается в том, что невозможно представить серию с непостоянным временным поясом, поэтому такое поведение является единственным разумным способом работы с вводами, такими как [+1, +2, +3] (в которых изменения перехода на летнее/зимнее время являются примером).

Это хорошо и прекрасно, что Polars не хочет заниматься неясными предположениями, но как мне безопасно извлечь “+10:00”, чтобы разобраться с этим самостоятельно? (или с [+1, +2, +3] в более сложных случаях.) chrono успешно парсит это как смещение, как я могу получить это как столбец pl.Duration или что-то подобное, не создавая парсер смещения с нуля самостоятельно?

Ответ или решение

Вопрос о получении смещения часового пояса (tz offset) из строковых представлений временных меток при использовании библиотеки Polars является важным для специалистов в области информационных технологий и анализа данных. В этой статье мы подробно рассмотрим, как извлечь смещение часового пояса из строк, содержащих информацию о временной зоне, и преобразовать его в формат, который можно использовать в Polars.

Понимание проблемы

Когда вы используете Polars для обработки строковых представлений дат с информацией о смещении, например, 2020-01-01T01:00+10:00, библиотека интерпретирует эти временные метки и автоматически преобразует их в стандартное время UTC. Это действительно вызвано тем, что Polars не поддерживает представление временных меток с различными смещениями в одном столбце, что делает имплементацию однородной и предсказуемой. Однако вам всё же требуется извлечь информацию о смещении для дальнейшего анализа или для создания пользовательских преобразований.

Решение проблемы с помощью Polars

Для того чтобы получить смещение часового пояса из строк с временными метками, нам нужно будет вручную извлечь информацию о смещении перед конвертацией строк в формат datetime. Поларс, к сожалению, не предоставляет прямого метода для этого, но вы можете добиться желаемого результата, используя методы регулярных выражений и преобразование типов.

Вот шаги для выполнения данной задачи:

  1. Использование регулярных выражений для извлечения смещения: Вы можете воспользоваться функцией str.extract для извлечения смещения из строкового представления временной метки с помощью регулярного выражения.

  2. Преобразование извлеченного смещения в формат Duration: После извлечения смещения, вы можете преобразовать его в тип pl.Duration, который затем можно использовать для анализа.

Пример кода

Ниже приведённый пример показывает, как извлечь смещение часового пояса и преобразовать его в тип pl.Duration:

import polars as pl

# Исходные данные
data = pl.Series(['2020-01-01T01:00+10:00'])

# Извлечение смещения с использованием регулярного выражения
offsets = data.str.extract(r'([+-]\d{2}:\d{2})')

# Преобразование полученного смещения в полосу времени (Duration)
# Здесь мы также можем преобразовать строку к количеству минут
def duration_from_offset(offset_str):
    if offset_str:
        sign = 1 if offset_str[0] == '+' else -1
        hours, minutes = map(int, offset_str[1:].split(':'))
        return pl.Duration(minutes=sign * (hours * 60 + minutes))
    return None

# Применяем функцию преобразования к извлеченным смещениям
duration_column = offsets.apply(duration_from_offset)

# Вывод результатов
print("Смещения:")
print(offsets)
print("Длительность:")
print(duration_column)

Заключительные мысли

Таким образом, извлечение смещения часового пояса из строковых представлений временных меток в Polars требует некоторого дополнительного кода, но представляет собой интересный подход к обработке временных данных. Применяя регулярные выражения для извлечения данных и затем конвертируя их в необходимый тип, вы сможете использовать эту информацию для дальнейшего анализа.

Эти шаги помогут вам эффективно управлять временными данными, что особенно полезно при анализе данных, связанных с разными часовыми поясами и учётом перехода на летнее/зимнее время. Используя подход, описанный в этой статье, вы сможете более эффективно обрабатывать временные метки с учетом смещения временной зоны.

Оцените материал
Добавить комментарий

Капча загружается...