我有一个用几个并发函数(asyncio
协程)修改panda Dataframe 的脚本。每个函数都向 Dataframe 添加行,并且所有函数共享同一个列表是很重要的。然而,当我用pd.concat
添加一行时, Dataframe 的一个新副本被创建了。我可以分辨出来,因为每个 Dataframe 现在都有一个不同的内存位置,如id()
所示。
因此,函数不再共享同一个对象。我如何保持所有函数指向一个公共 Dataframe 对象?
请注意,当我使用append
方法时,这个问题不会出现,但该方法已被弃用。
1条答案
按热度按时间mwngjboj1#
Pandas Dataframe 是高效的,因为它们使用连续的内存块,通常是像int和float这样的基本类型。你不能只添加一行,因为 Dataframe 不拥有它必须扩展到的下一个内存位。级联通常需要分配新的内存和复制数据。一旦发生这种情况,引用原始 Dataframe
如果你知道你想要的最终大小,你可以预分配和填充。否则,你最好保持一个新 Dataframe 的列表,并把它们一次连接起来。因为这些是并行过程,它们不依赖于彼此的输出,所以这可能是一个可行的选择。