如何解决Polars中`min`操作不支持null dtype的错误
Polars中对含单个null的列表列执行min操作报错的解决方法
问题描述
我有一个仅含一行的Polars DataFrame,其中的列表列仅包含一个null值。当尝试对该列表执行min操作时,触发错误:
polars.exceptions.InvalidOperationError:
minoperation not supported for dtypenull
最小可复现示例(MRE)
import polars as pl data = pl.DataFrame({"list_col": [[None]]}, schema={"list_col": pl.List}) print(data) col = "list_col" data.with_columns(pl.col(col).list.min().alias(col + "_min"))
输出:
shape: (1, 1) ┌────────────┐ │ list_col │ │ --- │ │ list[null] │ ╞════════════╡ │ [null] │ └────────────┘
已尝试方法
- 使用条件判断
pl.when():
data.with_columns( pl.when(pl.col(col).is_not_null()).then(pl.col(col).list.min()).alias(col + "_min")).collect()
- 先去除列表null值再判断:
data.with_columns( pl.when(pl.col(col).list.drop_nulls().is_not_null()).then(pl.col(col).list.min()).alias(col + "_min")).collect()
解决方案
问题根源在于该列表列的内部数据类型是pl.List(pl.Null),这类类型不支持min操作。只需将其转换为合适的数值类型(如pl.List(pl.Float64))即可解决:
# 转换数据类型 data = data.with_columns(pl.col(col).cast(pl.List(pl.Float64))) data # 正常执行min操作 data.with_columns(pl.col(col).list.min().alias(col + "_min"))
内容的提问来源于stack exchange,提问作者Björn
相关产品推荐
相关产品推荐

