在循环迭代结束时删除python pandas数据帧

问题描述 投票:1回答:1

我正在尝试将相同的处理方法应用于一堆pandas数据帧。

由于这些数据帧很大,我没有足够的内存来同时加载它们。所以我有一个列表及其各自的位置,我想逐个加载和分析它们。

但是,每次迭代时,都会使用越来越多的内存。我想数据帧在迭代结束时不会被删除。我不知道如何解决它。

这是我的代码:

folder = 'my/folder'
colors = ['b', 'r']

for i, f in enumerate(glob.glob(folder+'*.txt')):
    print(f)
    df = pd.read_table(f, index_col=False, header=None, delimiter="\t", names=['chr', 'x', 'y'])
    plt.figure(figsize=(32, 8))
    for j, chrm in enumerate(df.chr.unique()):
        plt.plot(df.loc[df.chr == chrm].x, df.loc[df.chr == chrm].y, label=chrm, color=colors[j])
    plt.ylim(0, 200)
    plt.legend()

我必须补充一点,我在Spyder工作。

到目前为止,我尝试过:

  • 在循环结束时添加del dfdf=None
  • 将for循环转换为函数并在其上调用map函数
  • 在循环结束时使用gc.collect()包中的gc函数

有人知道如何在迭代结束时删除我的df或替代解决方案吗?

非常感谢。

python for-loop dataframe memory-management
1个回答
0
投票

del语句只会删除名称。您必须手动垃圾收集才能从内存中删除数据帧。试试这个:

import gc gc.collect()

© www.soinside.com 2019 - 2024. All rights reserved.