Python 数据帧的精确内存使用估计

Python 数据帧的精确内存使用估计,python,windows,pandas,memory,Python,Windows,Pandas,Memory,我发现pandas和python报告的内存使用情况与OS(在我的例子中是Windows)报告的python进程的实际内存使用情况不匹配 在我导入numpy、pandas和一些其他标准lib(如os、sys)之后,自己进程的RAM消耗量、报告的psutil和与任务管理器一致的RAM消耗量等于89020k 然后,我创建了由对象和数字数据类型组成的示例数据帧,如下所示: l=5_000_000 df=pd.DataFrame(np.random.uniform(-100100,size=l),colu

我发现pandas和python报告的内存使用情况与OS(在我的例子中是Windows)报告的python进程的实际内存使用情况不匹配

在我导入numpy、pandas和一些其他标准lib(如os、sys)之后,自己进程的RAM消耗量、报告的psutil和与任务管理器一致的RAM消耗量等于89020k

然后,我创建了由对象和数字数据类型组成的示例数据帧,如下所示:

l=5_000_000
df=pd.DataFrame(np.random.uniform(-100100,size=l),columns=list('A'))
df['B']='dsgdb9nsdalWofsT'
df['C']=np.random.randint(0130000,size=l).astype(np.int64)
df['D']=np.random.randint(0130000,size=l).astype(np.int64)
df['E']='2JHH'
创建dataframe psutil报告后,286 696 K(同样,与Windows任务管理器一致)

运行df.info()时,我得到

195 312.6

那怎么办

df.memory\u用法(index=True,deep=True).sum()/1024?
好极了

771484.5

我无法解释

根据熊猫的文件

在没有深入反省的情况下,根据列进行内存估计 假定值占用相同内存的数据类型和行数 对应数据类型的金额。有了深刻的记忆内省 实际内存使用率计算是以 计算资源

因此,我们可以期望deep选项更加精确<怎么不是呢?我错过了什么?为什么它会给出错误的结果?这是功能还是错误?

我还必须指出,在使用sys模块时,python本身给出了错误的结果:

sys.getsizeof(df)/1024
771484.52

我正在使用Jupyter笔记本服务器5.7.4进行测试,我的规格是

Python版本:3.7.2(默认值,2019年2月21日,17:35:59)[MSC v.1915 64位(AMD64)]

站台:AMD64

系统:Windows-10-10.0.17763-SP0

熊猫:0.25.0


numpy:1.16.2

我在CentOS 7上用熊猫1.0.3和Python 3.7.4运行了这个程序。我得到了同样的结果。似乎
df.memory\u用法(index=True,deep=True)
getsizeof
都有缺陷。如果我在创建
dataframe
之前和之后检查
process.memory_info()[0]
(RSS驻留集大小),差异是191MB。

根据我的经验,在加载JSON对象中包含数组的大型JSON文件时,数据帧内存估计值非常低。我有一个28 MB JSON文件加载到熊猫数据帧的示例。“deep”内存使用量显示为18MB,但RSS内存消耗量接近300MB。Python字典和列表似乎有相当大的开销。我认为这个错误在pandas 1,0.0中还没有解决。你有没有找到其他方法来估算?没有,我没有(
<class 'pandas.core.frame.DataFrame'>

RangeIndex: 5000000 entries, 0 to 4999999
Data columns (total 5 columns):
A    float64
B    object
C    int64
D    int64
E    object
dtypes: float64(1), int64(2), object(2)
memory usage: 190.7+ MB