我不知道如何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 ?我可以理解,>
或者<
操作对NA
将undefined
,但==
应该工作(没有?).
你在这里想要的行为是什么?如果你想做这样的选择你可以使条件(不是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)