刚刚启动了一个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数据帧的实际内存占用量?
答案 0 :(得分:0)
为什么在熊猫中加载12Mb文件时会占用150mb以上的空间 是内存中实际大小的12倍?
该12MB Excel文件为压缩格式。文件中原始数据的实际大小可能是该大小的5或10倍。您可以验证是否只是将文件重命名为.zip并提取其内容。
是否有任何“最佳实践”方法可以减少实际内存 熊猫数据框的足迹?修补dtypes?分类者?
是的,使用dtypes
,category
数据类型和向下转换是最好的方法。
由于大多数列都是字符串类型,因此减少内存的最佳选择是使用dtypes
为低基数列指定显式category
类型。
例如。国家,地区,性别,状态。
您的float64
列中的全部4个也可以简化为无符号的32位数据类型(或更小:如年龄,薪水)