熊猫内存使用不一致

时间:2018-09-04 08:43:17

标签: python pandas memory

当我使用Pandas DataFrame时,内存有些不一致。

这是我的代码框架:

import pandas as pd
import numpy as np

columns_dtype = {'A': np.int16, 'B': np.int8, ...}
df = pd.read_csv('my_file.csv', dtype=columns_dtype)

那基本上就是在控制列数据类型的同时用熊猫读取一个csv文件。但是,当我在寻找给程序分配多少内存时,这些信息似乎并不一致。

信息1:

df.info(memory_usage='deep')

给出:memory usage: 482.6 MB

信息2:

import dill, sys
sys.getsizeof(dill.dumps(df))

得出:506049782(所以506 Mb)

信息3:

分配给我的程序的RAM是:1.1 GiB(或1.2 Gb)

其他信息(但我认为这不相关):

my_file.csv的大小为888 Mb(ls -lh)

问题:

由于我只是将csv文件加载到Pandas DataFrame对象中,为什么我的程序需要超过1 Gb的RAM,而对象大小约为0.5 Gb?

非常感谢

1 个答案:

答案 0 :(得分:0)

我不会假装知道动态内存在熊猫中保存数据的深层底层用途。熊猫在加载大型平面文件时会感到饥饿,根据经验,熊猫会使用ram大小的5-10倍作为要加载的文件大小来进行分析。

为避免这些情况,您可以在加载时对数据进行分块:

  df = pd.load_csv(file_path, chunksize = 30000)

或者如果您要对列进行分析:

  df = pd.load_csv(file_path, usecols = list_of_columns_index)

或两者都有!

  df = pd.load_csv(file_path, chunksize = 30000, usecols = list_of_columns_index)

希望这有助于加快分析速度。