You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars处理夏令时/冬令时时间戳转换报错及本地时间转换方案

解决Polars转换跨夏令时/冬令时时间戳的报错问题

Polars不允许单个Datetime列同时存在多个时区偏移,这就是你遇到ComputeError: Different timezones found的原因。下面针对你的两个需求给出具体解决方案:

方案一:基于带偏移的时间戳字符串处理

先逐个解析时间戳为带时区的时间对象,统一转成UTC后再转回目标本地时区,绕开列级时区冲突:

import polars as pl
from datetime import datetime

testdata=[
    {'name': 'BST 11:06', 'ts': '2022:06:27 11:06:12.16+01:00'},
    {'name': 'GMT 7:06', 'ts': '2022:12:27 12:06:12.16+00:00'},
]

pdf = pl.DataFrame(testdata)

# 1. 逐个解析时间戳并转成UTC,绕开列级时区检查
pdfts = pdf.with_columns(
    pl.col('ts').map_elements(
        lambda x: datetime.strptime(x, "%Y:%m:%d %H:%M:%S.%f%z").astimezone(datetime.timezone.utc),
        return_dtype=pl.Datetime(time_unit='ns', time_zone='UTC')
    ).alias('utc_ts')
)

# 2. 转换到目标本地时区(示例用伦敦时区,替换成你的实际时区城市)
pdfts = pdfts.with_columns(
    pl.col('utc_ts').dt.convert_time_zone('Europe/London').alias('local_tz_ts')
)

# 3. 生成用于显示的本地时钟时间字符串
pdfts = pdfts.with_columns(
    pl.col('local_tz_ts').dt.strftime("%Y:%m:%d %H:%M:%S.%f").alias('local_display')
)

print(pdfts)

方案二:利用元数据的本地时间与时区城市(更可靠)

既然你的元数据里有「Time Zone City」和本地naive时间戳,直接用这两个字段构建带时区的Datetime,Polars会自动处理夏令时/冬令时切换,比依赖偏移字符串更准确:

import polars as pl

# 模拟包含完整元数据的测试数据
testdata_with_meta=[
    {'name': 'BST 11:06', 'local_ts': '2022:06:27 11:06:12.16', 'time_zone_city': 'Europe/London'},
    {'name': 'GMT 7:06', 'local_ts': '2022:12:27 12:06:12.16', 'time_zone_city': 'Europe/London'},
]

pdf_meta = pl.DataFrame(testdata_with_meta)

# 解析本地时间并关联时区城市,自动处理夏令时
pdfts_meta = pdf_meta.with_columns(
    pl.col('local_ts').str.strptime(pl.Datetime, fmt="%Y:%m:%d %H:%M:%S.%f")
    .dt.replace_time_zone(pl.col('time_zone_city'))
    .alias('local_tz_ts')
)

# 可选:转换为UTC统一存储
pdfts_meta = pdfts_meta.with_columns(
    pl.col('local_tz_ts').dt.convert_time_zone('UTC').alias('utc_ts')
)

print(pdfts_meta)

核心要点

  • Polars的Datetime列强制单一时区,必须统一到UTC或目标时区才能避免报错。
  • 使用时区城市(如Europe/London)而非固定偏移,能自动适配夏令时切换,结果更可靠。
  • dt.convert_time_zone用于跨时区转换,dt.replace_time_zone用于给无时区的时间戳指定时区。

内容的提问来源于stack exchange,提问作者pootle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:26:02