Dataframe 如何获得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

我想优化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)])
然而,当我对列的大小求和时,大小是不同的

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元素类型。如果有包含长字符串的列,您将获得更多的好处