查找数据框中具有某些缺失值的列的子集

Bog*_*ski 4 missing-data dataframe julia

给定 DataFrames.jl 中的以下数据框:

\n
julia> using DataFrames\n\njulia> df = DataFrame(x1=[1, 2, 3], x2=Union{Int,Missing}[1, 2, 3], x3=[1, 2, missing])\n3\xc3\x973 DataFrame\n Row \xe2\x94\x82 x1     x2      x3\n     \xe2\x94\x82 Int64  Int64?  Int64?\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82     1       1        1\n   2 \xe2\x94\x82     2       2        2\n   3 \xe2\x94\x82     3       3  missing\n
Run Code Online (Sandbox Code Playgroud)\n

我想找到missing其中包含价值的列。

\n

我努力了:

\n
julia> names(df, Missing)\nString[]\n
Run Code Online (Sandbox Code Playgroud)\n

但这是不正确的,因为names函数在传递类型时会查找传递类型的子类型。

\n

Bog*_*ski 5

如果您想查找实际包含missing值的列,请使用:

julia> names(df, any.(ismissing, eachcol(df)))
1-element Vector{String}:
 "x3"
Run Code Online (Sandbox Code Playgroud)

在这种方法中,我们迭代df数据帧的每一列并检查它是否至少包含一个缺失值。

如果您想查找可能包含缺失值的列,您需要检查它们的元素类型:

julia> names(df, [eltype(col) >: Missing for col in eachcol(df)]) # using a comprehension
2-element Vector{String}:
 "x2"
 "x3"

julia> names(df, .>:(eltype.(eachcol(df)), Missing)) # using broadcasting
2-element Vector{String}:
 "x2"
 "x3"
Run Code Online (Sandbox Code Playgroud)