朱莉娅中熊猫“dropna”的类似物

Igo*_*vin 2 pandas julia

我有一个 Julia 矩阵(当然,如果有帮助的话,我可以将其放入数据框),并且我想删除所有具有 NaN 值的行和列。谷歌似乎没有帮助。在 pandas 中,这是微不足道的:df.dropna().dropna(axis=1)

Bog*_*ski 5

这是 DataFrames.jl 的答案。要删除具有缺失值的行和列,请分别执行以下操作:

\n
julia> using DataFrames\n\njulia> df = DataFrame(a=[1, 2, missing], b=[1, missing, 3], c=[1, 2, 3])\n3\xc3\x973 DataFrame\n Row \xe2\x94\x82 a        b        c\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\xe2\x94\x80\n   1 \xe2\x94\x82       1        1      1\n   2 \xe2\x94\x82       2  missing      2\n   3 \xe2\x94\x82 missing        3      3\n\njulia> dropmissing(df)\n1\xc3\x973 DataFrame\n Row \xe2\x94\x82 a      b      c\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\n   1 \xe2\x94\x82     1      1      1\n\njulia> df[all.(!ismissing, eachrow(df)), :] # the same using 2-dimensional indexing\n1\xc3\x973 DataFrame\n Row \xe2\x94\x82 a       b       c\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\n   1 \xe2\x94\x82      1       1      1\n\njulia> select(df, all.(!ismissing, eachcol(df)))\n3\xc3\x971 DataFrame\n Row \xe2\x94\x82 c\n     \xe2\x94\x82 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\n   1 \xe2\x94\x82     1\n   2 \xe2\x94\x82     2\n   3 \xe2\x94\x82     3\n\njulia> df[:, all.(!ismissing, eachcol(df))] # the same using 2-dimensional indexing\n3\xc3\x971 DataFrame\n Row \xe2\x94\x82 c\n     \xe2\x94\x82 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\n   1 \xe2\x94\x82     1\n   2 \xe2\x94\x82     2\n   3 \xe2\x94\x82     3\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,删除行比删除列容易得多。原因是 DataFrames.jl 中的设计决策是大多数函数将数据帧视为行的集合,并且dropmissing函数就是这种情况的一个示例。

\n

主要的例外是:

\n
    \n
  • 索引(始终二维的)
  • \n
  • selecttransformcombine作用于列的函数
  • \n
\n

对于矩阵来说,这是类似的,但由于它们不像数据框那样偏爱行而不是列,您可以这样做,例如:

\n
julia> mat = Matrix(df)\n3\xc3\x973 Array{Union{Missing, Int64},2}:\n 1         1         1\n 2          missing  2\n  missing  3         3\n\njulia> mat[all.(!ismissing, eachrow(df)), :]\n1\xc3\x973 Array{Union{Missing, Int64},2}:\n 1  1  1\n\njulia> mat[:,  all.(!ismissing, eachcol(df))]\n3\xc3\x971 Array{Union{Missing, Int64},2}:\n 1\n 2\n 3\n
Run Code Online (Sandbox Code Playgroud)\n