Dataframe 为什么map在对数据阵列进行操作时会丢弃类型信息?
我试图理解为什么会发生这种情况,即使考虑到数据阵列的局限性。假设要映射到Int64的DataArray:Dataframe 为什么map在对数据阵列进行操作时会丢弃类型信息?,dataframe,julia,Dataframe,Julia,我试图理解为什么会发生这种情况,即使考虑到数据阵列的局限性。假设要映射到Int64的DataArray: da = DataArray([1,2,3,4]) println(typeof(da)) println(typeof(map(a -> a^2, da))) # Returns an int for this input println(typeof(map(a -> int(a^2), da))) # Cast the piecewise result to int pri
da = DataArray([1,2,3,4])
println(typeof(da))
println(typeof(map(a -> a^2, da))) # Returns an int for this input
println(typeof(map(a -> int(a^2), da))) # Cast the piecewise result to int
println(typeof(int(map(a -> a^2, da)))) # Cast the output DataArray{Any,1} to int
导致
DataArray{Int64,1}
DataArray{Any,1}
DataArray{Any,1}
Array{Int64,1}
对于数组,a=[1,2,3,4]
,map(a->a^2,da)
按预期返回INT64数组。映射和/或数据数组是什么导致类型信息在此处丢失的?当您使用的类型没有将DataArray{any,1}转换为DataArray{ThatType,1}的构造函数(如Dates.DateTime)时,是否有保存类型信息的解决方案
编辑:convert可以很好地使DataArray{Any,1}成为DataArray{ThatType,1}(至少对于DateTime是这样)
检查来源它正在创建要返回的类型DataArray{Any,1}
res = DataArray(Any, n)
您可以查看James Fairbanks给出的答案(2015年4月1日04:12)抓得好,我忘了地图!这是我应该用的。
# TODO: should this be an AbstractDataVector, so it works with PDV's?
function Base.map(f::Function, dv::DataVector)
n = length(dv)
res = DataArray(Any, n)
for i in 1:n
res[i] = f(dv[i])
end
return res
end
res = DataArray(Any, n)