【问题标题】:delete python pandas dataframe in the end of a loop iteration在循环迭代结束时删除 python pandas 数据框
【发布时间】:2018-09-17 17:25:42
【问题描述】:

我正在尝试对一堆 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 包中的gc.collect() 函数

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

非常感谢。

【问题讨论】:

  • 我不认为内存问题与数据框有关,而是与您的图表有关。你要关闭你的数字吗?尝试不使用图表但使用相同的数据框循环进行测试,看看是否仍然存在问题。
  • 你是对的,这就是问题所在。我不是想删除好对象,我的坏。非常感谢!

标签: python for-loop dataframe memory-management


【解决方案1】:

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

导入 gc gc.collect()

【讨论】:

  • 嗨!欢迎来到 StackOverflow!也许您可以考虑改进格式。
猜你喜欢
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 2021-12-19
相关资源
最近更新 更多