我有一个可能包含缺失值的 DataFrame,并且我想过滤掉至少包含一个缺失值的所有行,因此从此
\nDataFrame(a = [1, 2, 3, 4], b = [5, missing, 7, 8], c = [9, 10, missing, 12])\n4\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 5 9\n 2 \xe2\x94\x82 2 missing 10\n 3 \xe2\x94\x82 3 7 missing\n 4 \xe2\x94\x82 4 8 12\nRun Code Online (Sandbox Code Playgroud)\n我想要类似的东西
\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 5 9\n 4 \xe2\x94\x82 4 8 12\nRun Code Online (Sandbox Code Playgroud)\n理想情况下,会有一个过滤器函数,我可以将每一行传递给 lambda,然后执行collectandfindfirst以及诸如此类的组合,但我不知道如何将 lambda 传递给subsetor @subset(从 DataFramesMeta),因为我不知道只有三栏,我有超过200栏。
按照@Antonello所说,你可以这样做dropmissing. 您有三个选择:
dropmissing:创建一个新的数据框,删除带有缺失值的行;dropmissing和view=true源数据框的视图,其中删除了带有缺失值的行;dropmissing!删除丢失值的行。默认情况下,会考虑所有列,但您可以更改它并传递一个列选择器,指定要在检查中包含哪些列。
\n最后,默认情况下,删除带有缺失值的行后,列将更改为eltype不允许缺失值,但您可以通过传递来更改此行为disallowmissing=false在这种情况下它们仍然允许它们。
subset以下是如何使用和执行过滤ismissing:
julia> subset(df, All() .=> ByRow(!ismissing))\n2\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 5 9\n 2 \xe2\x94\x82 4 8 12\nRun Code Online (Sandbox Code Playgroud)\n(我正在使用标准selectDataFrames.jl 中的标准)
或者如果您有一个非常宽的数据框(例如数千列):
\nsubset(df, AsTable(All()) => ByRow((x -> all(!ismissing, x))\xe2\x88\x98collect))\nRun Code Online (Sandbox Code Playgroud)\n(这是一种针对宽表的快速行式聚合而优化的特殊语法)
\n