如何在某些键具有NA值时查询(过滤)Julia DataFrame?

时间:2017-10-02 08:16:05

标签: linq dataframe julia

如果某些过滤器可能明确要求NA值,如何查询(过滤)Julia DataFrame?

E.g。

using DataFrames

df = DataFrame(
       a = ["aa", "bb","zz", "cc","cc"],
       b = [1, 2, 2, 3, 0],
       v = [12,13,14,15,16]
)

df[3,1]  = NA
df[5,2]  = NA

5×3 DataFrames.DataFrame
│ Row │ a    │ b  │ v  │
├─────┼──────┼────┼────┤
│ 1   │ "aa" │ 1  │ 12 │
│ 2   │ "bb" │ 2  │ 13 │
│ 3   │ NA   │ 2  │ 14 │
│ 4   │ "cc" │ 3  │ 15 │
│ 5   │ "cc" │ NA │ 16 │

这两种方法都不起作用:

# From DataFramesMeta.jl..
test = @where(:b .== 2, :a .== NA)

# From Query.jl..
x = @from i in df begin
    @where (i.a == "cc") && (i.b == NA)
    @select {i.a,i.b,i.v}
    @collect DataFrame
end

问题是如果请求过滤的参数是实际值或NA,我将不得不把它放入一个我不知道先验的函数中,所以要使用isna()我需要分支任何单个过滤器参数..

1 个答案:

答案 0 :(得分:1)

我了解到(NA == NA)(NA == everythingelse)都返回NA值,而不是预期的布尔值。

要获得预期的行为(并使用比较来查询存在或请求NA值的数据帧),可以使用isequal(a,b),例如:

test = @where(df, isequal.(:a,"cc"), isequal.(:b,NA) ) #from DataFramesMeta.jl