【问题标题】:How to make cycle which works with pandas.DataFrame work faster?如何使与 pandas.DataFrame 一起工作的循环更快地工作?
【发布时间】:2018-03-17 16:39:43
【问题描述】:

我正在尝试为分析准备数据并运行如下代码:

for i in df.index:
    df.loc[i,'col1'] = func1(df.loc[i,'colA_1'],y1,z)
    .....
    df.loc[i,'colN'] = funcN(df.loc[i,'colA_N'],yN,z)

但是由于 df 的长度(大约 100000 条记录)和执行此代码的函数数量最多需要 1 天。有谁知道如何让这些东西更快地工作? 感谢您的关注!

【问题讨论】:

  • 买一台更快的电脑?
  • 您没有提供太多代码,所以我只能建议购买一台更快的机器。
  • 是的,谢谢。我的已经很老了,但它仍然有 4 个内核,而循环只使用一个(?)我正在考虑诸如“线程”之类的东西。我尝试将 DataFrame 分成 4 个部分并在不同的线程中运行它们,但由于某种原因它没有工作。也许有人有使用“线程”和数据帧的好例子?

标签: python python-3.x pandas


【解决方案1】:

您可以改用DataFrame.transform(),使代码更简洁、更高效。

df.transform({'col1': func1, ...})

但我仍然认为这需要很长时间。这段代码中的大部分时间可能被您的函数占用,而不是被索引占用。所以我建议想办法让你的功能更快。

【讨论】:

  • 我还没有深入研究 DataFrame.transform 代码,但如果它像 apply 这样工作,它并不是真正的向量化,本质上是一个 Python for 循环。
  • 好的,那我就不提了。在任何情况下,我想到的唯一可能的矢量化都与索引有关。
  • 感谢您的建议,但也许有办法以某种方式并行化循环?
  • @iveagle 你在说什么“周期”?
  • 哦,你的意思是并行化循环?网上有很多关于如何做到这一点的信息,包括这个网站上的许多问题。看看“pandas multiprocessing”或类似的东西。
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多