Вопрос или проблема
При использовании 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. Поларс, к сожалению, не предоставляет прямого метода для этого, но вы можете добиться желаемого результата, используя методы регулярных выражений и преобразование типов.
Вот шаги для выполнения данной задачи:
-
Использование регулярных выражений для извлечения смещения: Вы можете воспользоваться функцией
str.extract
для извлечения смещения из строкового представления временной метки с помощью регулярного выражения. -
Преобразование извлеченного смещения в формат 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 требует некоторого дополнительного кода, но представляет собой интересный подход к обработке временных данных. Применяя регулярные выражения для извлечения данных и затем конвертируя их в необходимый тип, вы сможете использовать эту информацию для дальнейшего анализа.
Эти шаги помогут вам эффективно управлять временными данными, что особенно полезно при анализе данных, связанных с разными часовыми поясами и учётом перехода на летнее/зимнее время. Используя подход, описанный в этой статье, вы сможете более эффективно обрабатывать временные метки с учетом смещения временной зоны.