为什么 pandas 和 R 之间的数据帧内存使用量存在如此大的差异?

pie*_*ons 4 python memory r dataframe pandas

我正在处理https://opendata.rdw.nl/Voertuigen/Open-Data-RDW-Gekentekende_voertuigen_brandstof/8ys7-d773中的数据(使用“Exporteer”按钮下载 CSV 文件)。

当我使用 R 将数据导入到 R 时,read.csv()它需要 3.75 GB 的内存,但是当我使用它将数据导入 pandas 时,pd.read_csv()它会占用 6.6 GB 的内存。

为什么这个差异这么大呢?

我使用以下代码来确定 R 中数据帧的内存使用情况:

library(pryr) 
object_size(df)
Run Code Online (Sandbox Code Playgroud)

和蟒蛇:

df.info(memory_usage="deep")
Run Code Online (Sandbox Code Playgroud)

tdy*_*tdy 8

我发现该链接非常有用,并认为值得从评论中进行总结:

减少 Pandas 内存使用#1:无损压缩

  1. 仅加载感兴趣的列usecols

    df = pd.read_csv('voters.csv', usecols=['First Name', 'Last Name'])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用较小的数据类型缩小数字列

    • int64:(默认) -9223372036854775808 至 9223372036854775807
    • int16:-32768 至 32767
    • int8:-128 至 127
    df = pd.read_csv('voters.csv', dtype={'Ward Number': 'int8'})
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用 dtype 缩小分类数据category

    df = pd.read_csv('voters.csv', dtype={'Party Affiliation': 'category'})
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将大部分nan数据转换为 dtypeSparse

    sparse_str_series = series.astype('Sparse[str]')
    sparse_int16_series = series.astype('Sparse[int16]')
    
    Run Code Online (Sandbox Code Playgroud)