Julia DataFrames.jl - 使用NA过滤数据(NAException)

dat*_*fig 6 julia

我不知道如何NA在Julia DataFrames中处理.

例如,使用以下DataFrame:

> import DataFrames
> a = DataFrames.@data([1, 2, 3, 4, 5]);
> b = DataFrames.@data([3, 4, 5, 6, NA]);
> ndf = DataFrames.DataFrame(a=a, b=b)
Run Code Online (Sandbox Code Playgroud)

我可以在列上成功执行以下操作 :a

> ndf[ndf[:a] .== 4, :]
Run Code Online (Sandbox Code Playgroud)

但如果我尝试相同的操作,:b我会收到错误NAException("cannot index an array with a DataArray containing NA values").

> ndf[ndf[:b] .== 4, :]

NAException("cannot index an array with a DataArray containing NA values")
while loading In[108], in expression starting on line 1

in to_index at /Users/abisen/.julia/v0.3/DataArrays/src/indexing.jl:85
in getindex at /Users/abisen/.julia/v0.3/DataArrays/src/indexing.jl:210
in getindex at /Users/abisen/.julia/v0.3/DataFrames/src/dataframe/dataframe.jl:268
Run Code Online (Sandbox Code Playgroud)

这是因为NA值的存在.

我的问题是应该如何NA处理DataFrames ?我可以理解,>或者<操作对NAundefined,但==应该工作(没有?).

ARM*_*ARM 5

你在这里想要的行为是什么?如果你想做这样的选择你可以使条件(不是NAN)和(等于4).如果第一次测试失败,那么第二次测试就不会发生.

using DataFrames
a = @data([1, 2, 3, 4, 5]);
b = @data([3, 4, 5, 6, NA]);
ndf = DataFrame(a=a, b=b)
ndf[(!isna(ndf[:b]))&(ndf[:b].==4),:]
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能只想删除某些列中具有NA的所有行

ndf = ndf[!isna(ndf[:b]),:]
Run Code Online (Sandbox Code Playgroud)