[英]Apply function to every element in a list in a df column
如何將 function 應用於 dataframe 每一行中列表中的每個元素?
df:
label top_topics
adverts ['werbung', 'geschenke']
我的 function 看起來像這樣:
from langdetect import detect
from googletrans import Translator
def detect_and_translate(text):
target_lang = 'en'
try:
result_lang = detect(text)
except:
result_lang = target_lang
if result_lang == target_lang:
return text, result_lang
else:
translator = Translator()
translated_text = translator.translate(text, dest=target_lang)
return translated_text.text, result_lang
期待 output,例如:
label top_topics translation language
adverts ['werbung', 'geschenke'] ['advertising', 'gifts'] de
我嘗試過類似的操作,但沒有翻譯列top_topics
,因為它無法遍歷列表中的每個元素。
df['translate_detect'] = df['top_topics'].apply(detect_and_translate)
df['top_topics_en'], df['language'] = df.translate_detect.str
有什么幫助嗎?
首先, 你永遠不應該使用裸except
。
其次,因為您的 function 翻譯了一個單詞並將翻譯后的單詞和檢測到的語言作為一個元組返回,所以要實現您想要的 output 翻譯單詞列表和一種檢測到的語言將是困難而乏味的。 相反,請修改您的 function 以執行此操作:
import googletrans
def detect_and_translate(lst):
translator = Translator()
target_lang = 'en'
try:
result_lang = translator.detect(lst[0])
except Exception: # should be the specific exception that can occur
return lst, result_lang
translations = []
for text in lst:
translated_text = translator.translate(text, dest=target_lang)
translations.append(translated_text.text)
return translations, result_lang
用法:
In [4]: googletrans.__version__
Out[4]: '4.0.0-rc.1'
In [5]: df[["topics_en", "language"]] = df.top_topics.apply(detect_and_translate).apply(pd.Series)
In [6]: df
Out[6]:
label top_topics topics_en language
0 adverts [werbung, geschenke] [advertising, gifts] Detected(lang=de, confidence=None)
請注意, googletrans.Translator
具有語言檢測方法。 它在3.0.0
中不起作用,但如果你pip install googletrans==4.0.0rc1
它會。
另請注意,為了使其起作用,您必須假設給定列表中的所有單詞都是相同的語言。 如果這不是您可以做出的假設,則您需要想出其他辦法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.