簡體   English   中英

如何在DataFrame中加快Python應用功能

[英]How to speed up my Python apply function across a DataFrame

我有一個相當大的數據集,我正在嘗試計算每個文檔的情緒。 我正在使用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))

掛牆時間:4min 11s

掛牆時間:3分59秒

我假設full_transx['body_text']是一系列字符串。 在那種情況下,遍歷底層的numpy數組以建立列表理解通常會更有效:

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

遍歷numpy數組效率不高。 我建議您找到一種將函數應用於數組本身的方法。 我無法嘗試,但也許您可以嘗試使用analyzer.polarity_scores(full_trans['body_text'].values)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM