减少熊猫内存占用?

时间:2017-02-23 01:06:08

标签: python pandas memory dataframe categorical-data

刚刚启动了一个Jupyter终端,并将一个Excel文件(~12MB)加载到Pandas Dataframe中

加载文件前:

console
  

内存使用量:40(Mb)

将文件加载到Pandas Dataframe后:

>> import resource
>> print 'Memory usage: %s (Mb)' % (resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024)
  

内存使用量:193(Mb)

为什么12Db文件加载到pandas中时占用150mb,超过内存实际大小的12倍?

以下列dtypes的详细分类。我猜对象dtypes分配的内存多于列的实际用量?

>> import pandas as pd
>> df = pd.read_excel('/var/www/temp_test_files/stackoverflow_survey_2016.xlsx')
>> print 'Memory usage: %s (Mb)' % (resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024)

是否有任何“最佳实践”方法来减少Pandas数据帧的实际内存占用量?

  • 修补dtypes?
  • 分类?

1 个答案:

答案 0 :(得分:0)

  

为什么在熊猫中加载12Mb文件时会占用150mb以上的空间   是内存中实际大小的12倍?

该12MB Excel文件为压缩格式。文件中原始数据的实际大小可能是该大小的5或10倍。您可以验证是否只是将文件重命名为.zip并提取其内容。

  

是否有任何“最佳实践”方法可以减少实际内存   熊猫数据框的足迹?修补dtypes?分类者?

是的,使用dtypescategory数据类型和向下转换是最好的方法。

由于大多数列都是字符串类型,因此减少内存的最佳选择是使用dtypes为低基数列指定显式category类型。 例如。国家,地区,性别,状态。

您的float64列中的全部4个也可以简化为无符号的32位数据类型(或更小:如年龄,薪水)