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
相关产品推荐
相关产品推荐

