【问题标题】:How to speed up my Python apply function across a DataFrame如何在 DataFrame 中加速我的 Python 应用函数
【发布时间】:2019-07-04 13:04:15
【问题描述】:

我有一个相当大的数据集,我正在尝试计算每个文档的情绪。我正在使用 Vader 通过以下代码计算情绪,但此过程需要 6 多个小时才能运行。我正在寻找任何方法来加快这个过程。

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

analyzer = SentimentIntensityAnalyzer()

%time full_trans['bsent'] = full_trans['body_text'].apply(lambda row: analyzer.polarity_scores(row))

任何想法都会很棒,因为像这样循环遍历行非常低效。

例如,我在一个包含 100 个观察值的小样本上运行了我的代码。替代代码形式的结果如下。我的原始代码是第一,对列表理解的建议更改是第二。这两种方法之间的性能没有提高似乎很奇怪。

transtest = full_transx.copy(deep=True)

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

analyzer = SentimentIntensityAnalyzer()

%time transtest['bsent'] = [analyzer.polarity_scores(row) for row in transtest['body_text']]

%time full_transx['bsent'] = full_transx['body_text'].apply(lambda row: analyzer.polarity_scores(row))

挂墙时间:4分11秒

挂起时间:3 分 59 秒

【问题讨论】:

  • 我想你可以找到答案here。如果你想更深入,有cythonnumba 库。

标签: python dataframe apply sentiment-analysis


【解决方案1】:

我假设full_transx['body_text'] 是一系列字符串。在这种情况下,循环遍历底层 numpy 数组以构建列表理解通常会更有效:

full_trans['bsent'] = [analyzer.polarity_scores(row) for row in full_trans['body_text'].values]

【讨论】:

  • 抱歉省略了,是的,'body_text' 是一个 DataFrame 列,其中每一行都是电话通话记录。
【解决方案2】:

循环遍历 numpy 数组效率不高。我建议您找到一种将函数应用于数组本身的方法。我无法尝试,但也许您可以尝试analyzer.polarity_scores(full_trans['body_text'].values)

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2020-07-20
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2020-02-28
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多