最小/最大值对Julia中DataFrame列的差异

时间:2017-01-22 11:46:50

标签: dataframe julia

当我尝试检索DataFrame中列的最大差异时,我收到错误。有什么问题?

using DataFrames

a = [2,4,10,4,8,8]
b = [5,9,7,2,8,7]
c = [2,9,7,6,8,1]

df = DataFrame(A = a, B = b, C = c)
df[2,:A] = NA
df[3,:C] = NA

ab=df[:A] - df[:B]
bc=df[:B] - df[:C]
ac=df[:A] - df[:C]

df[:max] = max(ab, bc, ac)

println(df)

=> LoadError:MethodError:没有方法匹配无效(:: DataArrays.DataArray {Int64,1},:: Array {Any,1})

执行df[:max] = max(ab, bc)df[:max] = max(a, b, c)的最大值可按预期工作。

有人可以澄清一下发生了什么吗?谢谢!

1 个答案:

答案 0 :(得分:2)

注意返回类型:

julia> typeof(ab)
DataArrays.DataArray{Int64,1}

julia> typeof(bc)
DataArrays.DataArray{Int64,1}

julia> typeof(ac)
DataArrays.DataArray{Int64,1}

julia> typeof(max(ab, bc))
Array{Any,1}

最后一个是问题。 Julia抱怨无法将DataArray{Int64,1}Array{Any,1}进行比较。原始Int数组不会发生这种情况,因为它们没有NA。正如DataFrames docsNA毒药阵列操作中所述。

观察到以下代码正常,因为它没有NA,因此完全指定了max的返回类型:

df2 = DataFrame(A = a, B = b, C = c)
df2[:max] = max(a, b, c)
typeof(df2[:max]) ### DataArrays.DataArray{Int64,1}

您最好的选择是在计算最大值之前从NA计算或清除DataFrame。按行清除NA的简便方法是

df3 = DataFrames.na_omit(df)[1]