python - pandas 数据帧的准确内存使用估计

标签 python windows pandas memory

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

我导入numpy、pandas等一些标准库(如os、sys)后,自身进程的RAM消耗,报psutil,与Task Manger一致,等于 89 020 K .

然后,我创建了包含对象和数字 dtype 的示例数据框,如下所示:

    l=5_000_000
    df = pd.DataFrame(np.random.uniform(-100,100,size=l), columns=list('A'))
    df['B']='dsgdb9nsdalWofsT'
    df['C']=np.random.randint(0,130000,size=l).astype(np.int64)
    df['D']=np.random.randint(0,130000,size=l).astype(np.int64)
    df['E']='2JHH'

创建数据框 psutil 报告后 286 696 千 (再次,与 Windows 任务管理器一致)。

运行 df.info() 我得到
<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

到目前为止,这是非常合乎逻辑的。

现在,让我们得到

    df.memory_usage(index=True,deep=False).sum()/1024

195 312.6



还有呢

    df.memory_usage(index=True,deep=True).sum()/1024 ?

了不起

771 484.5



我无法解释。

根据 Pandas 的文档,

Without deep introspection a memory estimation is made based in column dtype and number of rows assuming values consume the same memory amount for corresponding dtypes. With deep memory introspection, a real memory usage calculation is performed at the cost of computational resources.



所以我们可以期待 选项更精确。 怎么不是?我错过了什么?为什么会给出错误的结果?这是功能还是错误?

我还不得不说,python 本身在使用 时会给出错误的结果系统 模块:

    sys.getsizeof(df)/1024

771 484.52



我正在使用 Jupyter notebook server 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

Pandas :0.25.0

NumPy :1.16.2

最佳答案

我在 CentOS 7 上使用 Pandas 1.0.3 和 Python 3.7.4 运行它。我得到了相同的结果。似乎 df.memory_usage(index=True,deep=True)getsizeof都是 buggy 。如果我检查 process.memory_info()[0] (RSS 驻留集大小)dataframe 之前和之后创建时,差异为 191 MB。

关于python - pandas 数据帧的准确内存使用估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581854/

相关文章:

python:通过ID检查线程的状态

python - pip install numpy 不起作用 : "No matching distribution found"

windows - 如何在 PowerShell 上安装 git(在 PowerShell 上使用 bash)?

python - 根据索引是否存在于两个数据框中,选择并添加另一个数据框中的列值

python - 根据 if-elif-else 条件创建新列

python - 简单的*IDN?查询结果为 "Timeout expired before operation completed"

python - 使用循环(周期性)边界条件计算 numpy 数组中点之间距离的更快代码

python - 如果 __name__ == "__main__": do? 会怎样

windows - 如何在另一个安装程序中创建安装程序?

python - 使用 strptime 的日期超出月份范围