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

Polars多列聚合与缺失值/NaN处理相关问题咨询

Polars数据聚合常见问题解答

首先给出示例数据:

import polars as pl
import polars.selectors as cs
import numpy as np

data = pl.DataFrame({
    'x': ['a', 'b', 'a', 'b', 'a', 'a', 'a', 'b', 'a'],
    'y': [2, 3, 4, 5, 6, 7, 8, 9, 10],
    'z': [4, np.nan, np.nan, 8, 1, 1, 3, 4, 0],
    'm': [np.nan, 8, 1, np.nan, 3, 4, 8, 7, 1]
})

问题1:多列计算多种统计量时出现重复列错误

问题描述

执行data.group_by('x').agg(pl.all().mean(), pl.all().sum())时出现重复列错误。

解决方法

错误原因是pl.all().mean()和pl.all().sum()会生成同名列(比如原列y的均值和求和结果都叫y),导致列名冲突。只需给统计结果添加后缀区分即可:

data.group_by('x').agg(
    pl.all().mean().suffix('_mean'),
    pl.all().sum().suffix('_sum')
)

这样生成的列名会变成y_mean、y_sum、z_mean等,避免重复。

问题2:median返回有效值但mean没有

问题描述

执行以下代码时,median能得到有效值,但mean返回NaN:

print(data.select(pl.col('m').median())) ## line 1
print(data.select(pl.col('m').mean())) ## line 2

解答

你的猜测完全正确。中位数计算时会自动跳过缺失值,只要列中存在非空的有效数值,就能通过排序选取中间值得到结果;而mean返回NaN是因为当前列中的np.nan被当作浮点数的特殊值而非可跳过的缺失值,导致计算时包含无效值,最终结果为NaN。

问题3:将np.nan替换为None后mean计算正常的原因

解答

Polars对None和np.nan的处理机制不同:

  • None会被Polars识别为标准缺失值(null),计算mean时默认会跳过所有null值,因此能得到正确的均值。
  • np.nan是浮点数的特殊值,在部分场景下不会被Polars视为可跳过的缺失值,导致mean计算时因包含无效值返回NaN。

问题4:过滤含缺失值行时报错“expanding more than one col is not allowed”

错误含义

该错误表示你在filter中使用了多列表达式(pl.col(['z'])是多列选择,哪怕只传一个元素),而filter要求条件是单个布尔序列,多列表达式会生成多个布尔列,无法直接用于过滤。

实现过滤任一列含缺失值的行

可以用pl.any_horizontal组合多列的缺失值判断条件,或者直接用any(axis=1):

# 方法1:用any_horizontal
data.filter(pl.any_horizontal(pl.col(['z', 'm']).is_nan()))

# 方法2:用any(axis=1)
data.filter(pl.col(['z', 'm']).is_nan().any(axis=1))

# 若要直接删除含缺失值的行,更简洁的方式:
data.drop_nulls(subset=['z', 'm'])

问题5:一次性替换多列中的NaN

优雅实现方法

无需转numpy或自定义函数,直接用Polars内置的fill_null函数即可:

# 自动用列的均值填充NaN
data.with_columns(
    pl.col(['z', 'm']).fill_null(strategy='mean')
)

如果需要自定义填充值(比如预先计算的均值),可以这样写:

# 先计算各列的均值
col_means = data.select(pl.col(['z', 'm']).mean())

# 用预计算的均值填充
data.with_columns(
    pl.col(col).fill_null(col_means[col][0]) for col in ['z', 'm']
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:34:51