我有一个polars Dataframe,有两列:一个包含日期时间的字符串列和一个包含UTC偏移量的整数列(例如,EDT为—4).基本上,Dataframe看起来像这样:

>>> data
shape: (2, 2)
┌─────────────────────┬──────────┐
│ Datetime            ┆ Timezone │
│ ---                 ┆ ---      │
│ str                 ┆ i64      │
╞═════════════════════╪══════════╡
│ 2022-01-01 12:52:23 ┆ -4       │
│ 2023-03-31 04:22:59 ┆ -5       │
└─────────────────────┴──────────┘

现在,我想将此列转换为UTC或时区感知的datetime列.pl.Expr.str.to_datetime函数接受time_zone参数.不幸的是,这个参数只能作为字符串传递,而不能作为pl.Expr传递.

换句话说,我可以将所有列转换为相同的指定时区,但我不能根据另一列的值动态使用时区.

最后我想要的是如下内容(注意,Datetime列现在是datetime类型,时区偏移量已经动态添加(第一行为4小时,第二行为5小时).

>>> data
shape: (2, 2)
┌─────────────────────┬──────────┐
│ Datetime            ┆ Timezone │
│ ---                 ┆ ---      │
│ datetime            ┆ i64      │
╞═════════════════════╪══════════╡
│ 2022-01-01 16:52:23 ┆ -4       │
│ 2023-03-31 09:22:59 ┆ -5       │
└─────────────────────┴──────────┘

有没有一种方法可以做到这一点,而不需要基于map_elementsiter_rows的方法?

推荐答案

如果你不介意保持UTC格式,你可以使用

df = pl.DataFrame(
    {"Datetime": ["2022-01-01 12:52:23", "2023-03-31 04:22:59"], "Timezone": [-4, -5]}
)

df.with_columns(
    pl.col("Datetime")
    .str.to_datetime("%Y-%m-%d %H:%M:%S", time_zone="UTC")
    .dt.offset_by(pl.format("{}h", -pl.col("Timezone")))
    .alias("dt_conv")
)
shape: (2, 3)
┌─────────────────────┬──────────┬─────────────────────────┐
│ Datetime            ┆ Timezone ┆ dt_conv                 │
│ ---                 ┆ ---      ┆ ---                     │
│ str                 ┆ i64      ┆ datetime[μs, UTC]       │
╞═════════════════════╪══════════╪═════════════════════════╡
│ 2022-01-01 12:52:23 ┆ -4       ┆ 2022-01-01 16:52:23 UTC │
│ 2023-03-31 04:22:59 ┆ -5       ┆ 2023-03-31 09:22:59 UTC │
└─────────────────────┴──────────┴─────────────────────────┘

Python相关问答推荐

计算相同形状的两个张量的SSE损失

优化pytorch函数以消除for循环

在Python中管理打开对话框

如何从数据库上传数据到html?

在含噪声的3D点网格中识别4连通点模式

在Django admin中自动完成相关字段筛选

启用/禁用shiny 的自动重新加载

如何在PySide/Qt QColumbnView中删除列

将标签移动到matplotlib饼图中楔形块的开始处

处理Gekko的非最优解

语法错误:文档. evaluate:表达式不是合法表达式

如何在一组行中找到循环?

Python将一个列值分割成多个列,并保持其余列相同

如何为需要初始化的具体类实现依赖反转和接口分离?

如何防止html代码出现在quarto gfm报告中的pandas表之上

如何在Django模板中显示串行化器错误

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

Django更新视图未更新

VSCode Pylance假阳性(?)对ImportError的react

普洛特利express 发布的人口普查数据失败