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

Polars 1.x按日期列表分组报错Date32未实现的解决方法

Polars 1.x按日期列表分组报错的修复方案

问题原因

Polars从0.20.18升级到1.x版本后,直接对存储日期列表的period_bins列执行group_by会触发not implemented: Date32 panic错误,核心原因是1.x版本的分组哈希编码逻辑暂不支持包含Date类型的列表列。

修复方案

方案1:将日期列表转为元组类型

列表是不可哈希类型,而元组可哈希,Polars支持对元组列进行分组。通过map_elements将列表转为固定长度的日期元组即可:

import polars as pl
import datetime

dt_str = [{'ts': datetime.date(2023, 7, 1), 'files': 'AGG_202307.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2023, 8, 1), 'files': 'AGG_202308.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2023, 11, 1), 'files': 'KFC_202311.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2024, 2, 1), 'files': 'KFC_202402.xlsx',
           'period_bins': [datetime.date(2024, 1, 1), datetime.date(2024, 7, 1)]}]

# 将period_bins列的列表转为日期元组
dt = pl.from_dicts(dt_str).with_columns(
    pl.col("period_bins").map_elements(tuple, return_dtype=pl.Tuple([pl.Date, pl.Date]))
)

df_groups = dt.group_by("period_bins")
print(df_groups.all().to_dicts())

方案2:拆分列表为独立日期列

如果不需要保留原列表格式,可将日期列表拆分为period_start和period_end两个单独的日期列,按这两列分组更贴合Polars的列式处理逻辑:

import polars as pl
import datetime

dt_str = [{'ts': datetime.date(2023, 7, 1), 'files': 'AGG_202307.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2023, 8, 1), 'files': 'AGG_202308.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2023, 11, 1), 'files': 'KFC_202311.xlsx',
           'period_bins': [datetime.date(2023, 7, 1), datetime.date(2024, 1, 1)]},
          {'ts': datetime.date(2024, 2, 1), 'files': 'KFC_202402.xlsx',
           'period_bins': [datetime.date(2024, 1, 1), datetime.date(2024, 7, 1)]}]

# 拆分日期列表为两个独立列
dt = pl.from_dicts(dt_str).with_columns(
    period_start=pl.col("period_bins").list.get(0),
    period_end=pl.col("period_bins").list.get(1)
).drop("period_bins")

df_groups = dt.group_by(["period_start", "period_end"])
print(df_groups.all().to_dicts())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:48:31