Dataframe 如何获得Julia数据帧的内存大小?
我想优化Julia数据框架中的列。为此,我想得到优化前后数据帧的大小 下面是一个数据帧示例:Dataframe 如何获得Julia数据帧的内存大小?,dataframe,memory,julia,size,Dataframe,Memory,Julia,Size,我想优化Julia数据框架中的列。为此,我想得到优化前后数据帧的大小 下面是一个数据帧示例: rows, columns = 10_000, 50 df = rand([x for x in "ABCDE"], rows, columns) |> DataFrame 此df对象的大小 sizeof(df) sizeof(df) 尺寸是24 sum([sizeof(df[x]) for x in names(df)]) 然而,当我对列的大小求和时,大小是不同的 s
rows, columns = 10_000, 50
df = rand([x for x in "ABCDE"], rows, columns) |> DataFrame
此df对象的大小
sizeof(df)
sizeof(df)
尺寸是24
sum([sizeof(df[x]) for x in names(df)])
然而,当我对列的大小求和时,大小是不同的
sum([sizeof(df[x]) for x in names(df)])
列大小之和为2000000
这里是优化
for i = names(df)
df[i] = CategoricalArray(df[i], ordered=false)
end
结果如下:
尺寸是24
sum([sizeof(df[x]) for x in names(df)])
列大小之和为800
如何获得数据帧的准确大小,有什么建议吗?以下是一种方法:
julia> df = DataFrame(rand([x for x in "ABCDE"], rows, columns), :auto);
julia> Base.summarysize(df)
2007456
julia> Base.summarysize(mapcols(PooledArray, df)) # this will change in the next release of PooledArrays.jl as the default size of refarray element will be UInt32
525656
julia> Base.summarysize(mapcols(categorical, df))
2037256
julia> Base.summarysize(mapcols(x -> categorical(x, compress=true), df))
534856
但请注意,在本例中,它并不多,因为您的所有列都具有Char元素类型。如果列中包含长字符串,您将获得更多好处。以下是一种方法:
julia> df = DataFrame(rand([x for x in "ABCDE"], rows, columns), :auto);
julia> Base.summarysize(df)
2007456
julia> Base.summarysize(mapcols(PooledArray, df)) # this will change in the next release of PooledArrays.jl as the default size of refarray element will be UInt32
525656
julia> Base.summarysize(mapcols(categorical, df))
2037256
julia> Base.summarysize(mapcols(x -> categorical(x, compress=true), df))
534856
但请注意,在本例中,它并不多,因为您的所有列都具有Char元素类型。如果有包含长字符串的列,您将获得更多的好处