如果某些过滤器可能明确要求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()我需要分支任何单个过滤器参数..
答案 0 :(得分:1)
我了解到(NA == NA)
和(NA == everythingelse)
都返回NA
值,而不是预期的布尔值。
要获得预期的行为(并使用比较来查询存在或请求NA
值的数据帧),可以使用isequal(a,b)
,例如:
test = @where(df, isequal.(:a,"cc"), isequal.(:b,NA) ) #from DataFramesMeta.jl