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

如何用Elixir Explorer实现类似pandas fillna的全DataFrame空值填充?

在Explorer.DataFrame中实现类似pandas fillna的全局缺省值填充

如果你需要给整个DataFrame的所有nil值做填充,Explorer提供了几种简洁的实现方式,核心是结合Explorer.DataFrame.mutate/2和Explorer.Series.fill_missing/2来批量处理列:

1. 给所有列填充同一个常量值

用across(everything())选中所有列,统一应用填充规则:

import Explorer.DataFrame
import Explorer.Series

# 把所有nil值替换为0
df = df |> mutate(across(everything(), &fill_missing(&1, :value, 0)))

2. 按列类型/规则填充不同值

如果需要给不同列设置不同填充逻辑(比如数值列用均值,字符串列用默认文本),可以分批次指定列:

# 数值列用均值填充,字符串列填充"unknown"
df = df
|> mutate(across(only([:age, :salary]), &fill_missing(&1, :mean)))
|> mutate(across(only([:name, :address]), &fill_missing(&1, :value, "unknown")))

也可以用正则匹配列名来批量处理:

# 所有以_num结尾的列填充0,以_str结尾的列填充"NA"
df = df
|> mutate(across(matches(~r/_num$/), &fill_missing(&1, :value, 0)))
|> mutate(across(matches(~r/_str$/), &fill_missing(&1, :value, "NA")))

3. 灵活遍历列自定义填充

如果需要更细粒度的控制,可以手动遍历所有列名,逐个处理:

columns = df |> columns()

df = Enum.reduce(columns, df, fn col, acc ->
  # 这里可以根据列类型或名称自定义填充逻辑
  filled_series = 
    if acc[col] |> dtype() in [:integer, :float] do
      fill_missing(acc[col], :median)
    else
      fill_missing(acc[col], :value, "missing")
    end
  
  acc |> mutate(^col => filled_series)
end)

补充说明

fill_missing/2支持的填充策略和pandas的fillna对应:

  • :value:指定固定值填充(对应pandas的value参数)
  • :mean/:median:用列的均值/中位数填充(适合数值列)
  • :forward:前向填充(对应pandas的method="ffill")
  • :backward:后向填充(对应pandas的method="bfill")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:12