在循环中连接数据帧非常慢
Posted
技术标签:
【中文标题】在循环中连接数据帧非常慢【英文标题】: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 小时来运行该循环,现在它在不到一秒的时间内完成。谢谢
太棒了。我很高兴这对你有用。是的,我会记住“二次复制”问题。我提交了解决方案。
【参考方案1】:
您需要将数据框附加到列表中,而不是将数据附加到列表中。
试试:
interimdf.append(pd.DataFrame(listdf))
然后在你的循环之外,
pd.concat(interimdf)
【讨论】:
以上是关于在循环中连接数据帧非常慢的主要内容,如果未能解决你的问题,请参考以下文章