DataFrame如何将含有missing数据对应的列剔除

dropmissing函数可以将数据中带有missing的行剔除,如下所示,那么如何去除列呢

julia> df = DataFrame(i = 1:5,
                                 x = [missing, 4, missing, 2, 1],
                                 y = [missing, missing, "c", "d", "e"])
    5×3 DataFrame
    │ Row │ i     │ x       │ y       │
    │     │ Int64 │ Int64?  │ String? │
    ├─────┼───────┼─────────┼─────────┤
    │ 1   │ 1     │ missing │ missing │
    │ 2   │ 2     │ 4       │ missing │
    │ 3   │ 3     │ missing │ c       │
    │ 4   │ 4     │ 2       │ d       │
    │ 5   │ 5     │ 1       │ e       │

julia> dropmissing(df)
2×3 DataFrame
 Row │ i      x      y
     │ Int64  Int64  String
─────┼──────────────────────
   1 │     4      2  d
   2 │     5      1  e

想要的结果是:

julia> df2
5×1 DataFrame
│ Row │ i     │
│     │ Int64 │
├─────┼───────┤
│ 1   │ 1     │
│ 2   │ 2     │
│ 3   │ 3     │
│ 4   │ 4     │
│ 5   │ 5     │
df[:,map(x->(eltype(x)!=Union{nonmissingtype(eltype(x)),Missing}),eachcol(df))]

这样如何

1 个赞

哈哈,谢谢!根据你写的,下面的是不是更Julia一点 :grinning:

julia> using Pipe

julia> df[:, @pipe eachcol(df) .|> eltype .|> !(Missing <: (_))]
5×1 DataFrame
│ Row │ i     │
│     │ Int64 │
├─────┼───────┤
│ 1   │ 1     │
│ 2   │ 2     │
│ 3   │ 3     │
│ 4   │ 4     │
│ 5   │ 5     │

你这个不是julia的风格吧,更像是TidyVerse的风格,不过点语法确实是julia的特色,但julia同样也有map这种类似于项量化的函数。实际上我并不知道Julia是什么风格,因为它的结构很像python,但是功能又很像R。

啊,我也不知道 :joy:,只是入门