当我使用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?
非常感谢
答案 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)
希望这有助于加快分析速度。