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

Python Polars DataFrame中Datetime列表排序及提取问题

解决Polars DataFrame中Datetime列表排序并提取元素的问题

错误原因

你用df.filter(pl.col("order_purchase_timestamp").list.sort())报错,是因为filter是用来筛选行的,要求传入返回布尔值的条件(比如判断列表长度是否大于2),但list.sort()返回的是排序后的datetime列表,不是布尔值,所以触发了类型不匹配的错误。

正确处理方法

要实现每行列表内日期排序,并提取前两个元素,应该用with_columns来添加或修改列,而非filter。以下是具体代码示例:

import polars as pl

# 假设你的数据集是df
df = df.with_columns(
    # 先对每行的datetime列表进行升序排序,生成临时列
    sorted_timestamps=pl.col("order_purchase_timestamp").list.sort(),
    # 提取排序后的第一个datetime
    first_timestamp=pl.col("sorted_timestamps").list.get(0),
    # 提取第二个datetime,列表长度不足2时用None填充空值
    second_timestamp=pl.col("sorted_timestamps").list.get(1).fill_null(None)
).drop("sorted_timestamps")  # 不需要临时列的话可以删除

如果需要降序排序,只需要给list.sort()加reverse=True参数:

pl.col("order_purchase_timestamp").list.sort(reverse=True)

补充说明

  • list.sort():默认按升序对列表元素排序,支持datetime类型的比较
  • list.get(index):提取列表指定索引的元素,索引从0开始计数
  • fill_null(None):针对列表元素不足2个的行,将空值替换为None,避免后续处理报错

内容的提问来源于stack exchange,提问作者Andre Luiz Moura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:20