【发布时间】:2024-05-29 22:40:02
【问题描述】:
我正在做一个程序,在每次迭代时都会创建一些值(根本没有多少值:每次迭代只有约 50 个值,其中一些是 4-5 个短字符串,但大多数是 2-3 位整数)。大约有 3000 次迭代。
现在,我使用 pandas 数据框来存储给定迭代的约 50 个值,然后将 df 附加到数据框列表 (dflist) 中,一旦完成所有 3K 迭代,我将连接 3K 数据框(因为它们都有相同的列名)使用类似的东西:
df_final = pd.concat(dflist,axis=0)
是否有更好的方法来执行此过程,例如。只需使用 numpy 数组并沿轴 0 附加值,最后将完整的 numpy 数组转换为具有给定列名集的 Pandas 数据框?
我问是因为经过多次迭代(大约 3000 次迭代中的 200 次),代码速度大幅下降,系统内存使用率缓慢上升,据我所知,在迭代之间,我的所有值都被覆盖除了这个熊猫数据框列表之外的每次迭代,这似乎是每次迭代后唯一增长的东西。我正在使用 Python 2.7。当我在 Spyder GUI 中或仅从命令行运行我的脚本时,就会发生这种行为。
另一件事:尽管我实际保存的值相对较小(每次迭代大约 50 个值),但我提取这些汇总值所经过的数据非常大。所以原始的 csv 大约是 10 GB,有大约 2 亿行,我使用 pd.read_csv 对它进行分块,给定的块大小约为 50K 行。然后对于这 50K 行,我得到大约 50 个值。但我原以为每个块都是独立的,并且由于值被覆盖,内存使用量不应该像现在这样增长。
例子df:
CHFAC Bygoper Change MinB NumB NumCombos Total
0 abc3 574936022 + 1 1 1 11
1 abc3 574936022 - 1 0 0 0
2 abc3 574936022 + 2 1 1 11
3 abc3 574936022 - 2 0 0 0
4 abc3 574936022 + 5 1 1 11
5 abc3 574936022 - 5 0 0 0
6 abc3 574936022 + 10 1 1 11
7 abc3 574936022 - 10 0 0 0
【问题讨论】:
-
向我们展示你是 concat 的一到两个示例 df,根据你的帖子很难判断你有多少列、索引等。
标签: python pandas numpy append concatenation