如何在DataFrames.jl中筛选包含missing缺失值的DataFrame列
正确实现方法
你可以通过遍历每一列判断是否存在missing值的方式筛选列名,有两种常用写法:
- 通用写法(兼容所有DataFrames版本)
names(df)[[any(ismissing, col) for col in eachcol(df)]]
运行上述代码针对你给出的示例df会返回正确结果:
1-element Vector{String}: "x3"
- 简洁写法(适用于DataFrames 1.3及以上版本)
你可以直接给names函数传入谓词作为筛选条件,写法更简短:
names(df, x -> any(ismissing, x))
原写法问题说明
你之前使用的names(df, Missing)确实只会匹配列元素类型完全是Missing或者Missing的子类型的列,只能筛选出允许存储missing值的列,无法区分这些列中是否实际存储了missing值。如果你的需求是筛选所有允许存储missing的列(无论是否实际存在),可以用下面的写法:
names(df, eltype -> Missing <: eltype)
针对你的示例df运行该代码会返回["x2", "x3"]。
内容的提问来源于stack exchange,提问作者Bogumił Kamiński
相关产品推荐
相关产品推荐

