DevCN
菜单
全部文章快讯开发科技深度热点

Julia 缺失值处理:区分 missing 与数值零

为可能缺失的数值向量选择联合元素类型,通过 skipmissing 计算统计量,并为无有效记录时设计明确分支。


本节目标

为可能缺失的数值向量选择联合元素类型,通过 skipmissing 计算统计量,并为无有效记录时设计明确分支。

环境与运行方法

使用 Julia 1.11,保存为 lesson.jl,运行 julia --startup-file=no lesson.jl。示例只依赖基础语言,不需要安装数据分析包。

核心思路

missing 表示未知值,不是数值零。允许缺失的向量使用 Union{Missing,Int} 元素类型,skipmissing 提供跳过缺失的迭代方式。本例先收集有效值,便于同时计数和求和。

完整示例

records = Union{Missing,Int}[20, missing, 40, 0]
valid = collect(skipmissing(records))
println("valid=", length(valid), " total=", sum(valid))
average = isempty(valid) ? nothing : sum(valid) / length(valid)
println("average=", average)
only_missing = Union{Missing,Int}[missing]
println("empty=", isempty(collect(skipmissing(only_missing))))

预期输出

valid=3 total=60
average=20.0
empty=true

逐步理解

collect 建立可重复访问的有效值数组。三条有效记录包含零,所以平均值为 20。仅有 missing 的输入在过滤后为空,用 nothing 表示没有平均值,避免把无数据伪装成真实零。

skipmissing 只处理缺失,不检查负值和业务上限。若记录还可能非法,需要再加一层验证。大型数据可考虑一次遍历累计数量与总和,减少重复求和,但要保持空结果行为一致。

常见问题与边界

  • missing 与 nothing 的语义不同:未知数据和没有结果不能随意混用。
  • 不能用普通相等比较替代缺失判断。
  • 类型允许缺失不代表已经定义统计规则。

动手练习

把记录改成两个零,再改成两个 missing。

参考答案

两个零产生均值 0.0;全缺失应走无结果分支。两种情况可能总和都表现为零,但有效条数不同,业务展示必须区分。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。