在 Pandas 个数据帧上使用 .apply 时自定义函数的性能
Performance of custom function while using .apply on Pandas Dataframes
如标题所示,我想更好地了解在速度方面使用应用于数据框的自定义函数的局限性。示例:
df.apply(custom_function)
文档及其相关内容 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) 在主题上有点不明确,只是将此功能称为根据所使用的功能使其变慢。由于我不知道这种矢量化是如何发生的——因此使我的函数的分析成为一个时间 consuming-try-and-repeat 的事情,有人可以指出一些 rule-of-thumb 什么样的东西:
1)不降低速度
2) 大大减慢了整个过程
更准确地说:如果我在函数中将东西保存在其他地方,我会受到严重损坏吗?
我认为自定义函数变慢 Pandas 的主要原因是内置方法是在 Cython 中实现的(Python 的 C 扩展)。您将使用的任何纯 pythonic 都将比内置的慢得多。如果您设法使用同样在 Cython 中实现的扩展来满足您的需求,您可能会很幸运并获得相对不错的性能。根据 Pandas 文档“...最终的 cythonized 解决方案比纯 python 快大约 100 倍”(http://pandas.pydata.org/pandas-docs/stable/enhancingperf.html)
一般来说,我会避免从应用函数内部写入值。我无法想象你为什么要那样做。如果您需要有关返回系列的信息,最好在应用完成后回顾一下。
如标题所示,我想更好地了解在速度方面使用应用于数据框的自定义函数的局限性。示例:
df.apply(custom_function)
文档及其相关内容 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) 在主题上有点不明确,只是将此功能称为根据所使用的功能使其变慢。由于我不知道这种矢量化是如何发生的——因此使我的函数的分析成为一个时间 consuming-try-and-repeat 的事情,有人可以指出一些 rule-of-thumb 什么样的东西: 1)不降低速度 2) 大大减慢了整个过程
更准确地说:如果我在函数中将东西保存在其他地方,我会受到严重损坏吗?
我认为自定义函数变慢 Pandas 的主要原因是内置方法是在 Cython 中实现的(Python 的 C 扩展)。您将使用的任何纯 pythonic 都将比内置的慢得多。如果您设法使用同样在 Cython 中实现的扩展来满足您的需求,您可能会很幸运并获得相对不错的性能。根据 Pandas 文档“...最终的 cythonized 解决方案比纯 python 快大约 100 倍”(http://pandas.pydata.org/pandas-docs/stable/enhancingperf.html)
一般来说,我会避免从应用函数内部写入值。我无法想象你为什么要那样做。如果您需要有关返回系列的信息,最好在应用完成后回顾一下。