【问题标题】:Concatenating dataframes in a loop very slow在循环中连接数据帧非常慢
【发布时间】:2020-12-31 10:04:43
【问题描述】:

我正在通过在 for 循环中连接来构建一个“主”数据帧

df = pd.concat([df, pd.DataFrame(listdf)], axis = 1)

listdf 是在连接到数据帧之前进行预处理的临时列表。 我面临的问题是随着循环迭代次数的增加,构建数据帧的过程变得越来越慢。

我在这里研究过,根据这个建议,建立一个列表然后最终将它连接到一个数据帧中要快得多 Why does concatenation of DataFrames get exponentially slower?

但是这种方法不起作用

interimdf.append(listdf)
df = pd.concat(interimdf)

我收到了这个错误

TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid

我该如何解决这个问题。还有一种替代方法可以加快循环创建一个大数据帧的过程

【问题讨论】:

  • listdf的类型是什么? type(listdf) 为此,listdf 必须使用 pd.Series 或 pd.DataFrame。
  • 属于列表类型
  • 我不确定这是否适合您,但请在此处查看您的帖子。试试这个interimdf.append(pd.DataFrame(listdf))
  • 效果非常好。现在火的很快。早些时候,我需要 3-4 小时来运行该循环,现在它在不到一秒的时间内完成。谢谢
  • 太棒了。我很高兴这对你有用。是的,我会记住“二次复制”问题。我提交了解决方案。

标签: python pandas list dataframe loops


【解决方案1】:

您需要将数据框附加到列表中,而不是将数据附加到列表中。

试试:

interimdf.append(pd.DataFrame(listdf))

然后在你的循环之外,

pd.concat(interimdf) 

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2012-09-20
    • 2011-08-09
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多