为什么Pandas和R之间的数据框内存使用差别如此之大?

4

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

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

为什么这个差异如此之大?

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

library(pryr) 
object_size(df)

以及Python:

df.info(memory_usage="deep")

4
Pandas使用固定的数据类型来加载可能比R中使用的存储更大的数据。在read_csv中有一些参数可以大幅减少内存使用量。对于数字,使用不同的数据类型。Int8、int16和int64是很好的例子。 - Paul Brennan
2
我同意保罗的观点。这个链接可能是探索如何在 Python 中减小数据集大小的一个很好的起点。有关内存管理方面的深入探索,请参阅这个令人惊叹的资源 - aimbotter21
2
谢谢!我通过指定数据类型在pandas中成功将大小减小到3.6GB,效果非常显著。 - pieterbons
1个回答

8
我发现那个链接非常有用,认为值得从评论中分离出来并进行总结:

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

  1. Load only columns of interest with usecols

    df = pd.read_csv('voters.csv', usecols=['First Name', 'Last Name'])
    
  2. Shrink numerical columns with smaller dtypes

    • int64: (default) -9223372036854775808 to 9223372036854775807
    • int16: -32768 to 32767
    • int8: -128 to 127
    df = pd.read_csv('voters.csv', dtype={'Ward Number': 'int8'})
    
  3. Shrink categorical data with dtype category

    df = pd.read_csv('voters.csv', dtype={'Party Affiliation': 'category'})
    
  4. Convert mostly nan data to dtype Sparse

    sparse_str_series = series.astype('Sparse[str]')
    sparse_int16_series = series.astype('Sparse[int16]')
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接