Приведение столбца строки к pl.Datetime не сохраняет информацию о часовом поясе, а str.to_datetime — сохраняет.Python

Программы на Python
Ответить
Anonymous
 Приведение столбца строки к pl.Datetime не сохраняет информацию о часовом поясе, а str.to_datetime — сохраняет.

Сообщение Anonymous »

Polars версии 1.17.11
У меня есть объект json со следующей структурой:

Код: Выделить всё

json_obj = [
{"timestamp": "2024-10-01T21:23:23Z", "value": 31},
{"timestamp": "2024-10-01T23:44:11.124Z", "value": -453.2}
]
и я хочу создать DataFrame, в котором первый столбец имеет тип данных pl.Datetime, включая часовой пояс, а второй столбец — pl.Float64. Но создание DataFrame со схемой {"timestamp": pl.Datetime, "value": pl.Float64 дает мне ComputeError, и если я создаю DataFrame без схемы, а затем привожу столбец timestamp к pl.Datetime, я теряю информацию о часовом поясе.
Когда я создаю DataFrame:

Код: Выделить всё

json_obj = [
{"timestamp": "2024-10-01T21:23:23Z", "value": 31},
{"timestamp": "2024-10-01T23:44:11.124Z", "value": -453.2}
]
df = pl.DataFrame(json_obj)
print(df)
Вывод:

Код: Выделить всё

shape: (2, 2)
┌──────────────────────────┬────────┐
│ timestamp                ┆ value  │
│ ---                      ┆ ---    │
│ str                      ┆ f64    │
╞══════════════════════════╪════════╡
│ 2024-10-01T21:23:23Z     ┆ 31.0   │
│ 2024-10-01T23:44:11.124Z ┆ -453.2 │
└──────────────────────────┴────────┘
Обратите внимание, что второй столбец автоматически преобразуется к f64, несмотря на то, что первое значение является целым числом, и это хорошо. Но я хочу изменить тип первого столбца на дату и время с учетом часового пояса:

Код: Выделить всё

df = df.cast({"timestamp": pl.Datetime})
print(df)
Какие выходные данные:

Код: Выделить всё

shape: (2, 2)
┌─────────────────────────┬────────┐
│ timestamp               ┆ value  │
│ ---                     ┆ ---    │
│ datetime[μs]            ┆ f64    │
╞═════════════════════════╪════════╡
│ 2024-10-01 21:23:23     ┆ 31.0   │
│ 2024-10-01 23:44:11.124 ┆ -453.2 │
└─────────────────────────┴────────┘
Первый столбец приводится к дате и времени[мкс], но при этом удаляется информация о часовом поясе.
Однако, если я воссоздаю тот же кадр данных, но на этот раз заменю столбец метки времени строковой операцией:

Код: Выделить всё

json_obj = [
{"timestamp": "2024-10-01T21:23:23Z", "value": 31},
{"timestamp": "2024-10-01T23:44:11.124Z", "value": -453.2}
]
df = pl.DataFrame(json_obj)
df = df.with_columns(pl.col("timestamp").str.to_datetime())
print(df)
Я получаю следующий результат:

Код: Выделить всё

shape: (2, 2)
┌─────────────────────────────┬────────┐
│ timestamp                   ┆ value  │
│ ---                         ┆ ---    │
│ datetime[μs, UTC]           ┆ f64    │
╞═════════════════════════════╪════════╡
│ 2024-10-01 21:23:23 UTC     ┆ 31.0   │
│ 2024-10-01 23:44:11.124 UTC ┆ -453.2 │
└─────────────────────────────┴────────┘
Теперь у меня есть временная метка типа datetime[µs, UTC] без потери информации о часовом поясе.
Может ли кто-нибудь объяснить, почему приведение ведет себя по-другому?

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-while-st
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»