跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • pandas loc 操作会内存泄漏?
未分類
2 5 月 2020

pandas loc 操作会内存泄漏?

pandas loc 操作会内存泄漏?

資深大佬 : wuwukai007 54

df = pd.DataFrame() df 大概用了 1.5GB 内存 然后我 df = df.loc[xxx] df 切片为原来的 10 分之一,用 sys.getsizeof(df) df 内存为 100 多 MB,但是 python 的内存还是 1.5G+, 怎么会这样呢? 用了 gc.collect()也是不行

大佬有話說 (14)

  • 資深大佬 : djj510620510

    未复现:
    import pandas
    import sys

    df = pandas.DataFrame([[j for j in range(100)] for i in range(10000)])
    print(sys.getsizeof(df)) # 8000104
    df = df.loc[:100]
    print(sys.getsizeof(df)) # 80904

  • 資深大佬 : djj510620510

    @djj510620510

    是不是 df 里面有 list 或者 dict 之类的引用类型,

  • 主 資深大佬 : wuwukai007

    @djj510620510 切片后内存确实是少了
    但是你看 python 的内存,没释放

  • 主 資深大佬 : wuwukai007

    在 ipython 里面,这样操作后,切片后的内存对象小了,
    但是查看当前 python 占用内存,还是 切片之前的

  • 資深大佬 : djj510620510

    @wuwukai007

    啊,我看漏了,的确是内存还是那么多。

    不过我再测了一下,如果把处理放到函数里面的话,函数执行完了,内存就会减少:

    In [1]: def test():
    …: df = pandas.DataFrame([[j for j in range(1000)] for _ in range(10000)])
    …: df = df.loc[:100]
    …: return df
    …:

    In [2]:

    In [2]: import pandas

    In [3]: a = test()

  • 資深大佬 : Kelan

    python 就有这种问题,如果运算过程对内存很紧张的话,建议开子进程,用完销毁

  • 資深大佬 : zk8802

    IPython 的 In 与 Out 是不是保持了切片之前的数组的引用?试试 IPython.display.clear_output()

  • 資深大佬 : jyyx

    用 ipython 你可以看下 globals()里面还有原来的变量

  • 主 資深大佬 : wuwukai007

    @Kelan @djj510620510 @zk8802
    用了一个曲线的方法,
    df2 = df.loc[:100].copy()
    del df
    但是有一个问题,如果切片的数据也是很多的话比如源数据 1.5G 切一般,
    这样曲线做还是会临时增加 800MB 的内存。。。。

  • 主 資深大佬 : wuwukai007

    @jyyx @zk8802
    不是 ipython 的问题,我在脚本里跑发现这个问题才在 ipython 里面测试的

  • 資深大佬 : zk8802

    试试强制 garbage collection:
    import gc; gc.collect()

  • 資深大佬 : cheng6563

    不懂 python,会不会是 gc 回收内存后不会实时把内存还给操作系统。

  • 資深大佬 : TPOB

    我之前也遇到过类似的情况,后来像上说的用子进程了

  • 資深大佬 : jyyx

    我试了下的确用切片会有问题
    df = df.loc[xxx, :] 这样写会有问题
    可以试下改成 df.drop(xxxx, inplace=True)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具