如何將函式應用于資料框每一行的串列中的每個元素?
東風:
label top_topics
adverts ['werbung', 'geschenke']
我的函式看起來像這樣:
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
期待像這樣的輸出:
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
有什么幫助嗎?
uj5u.com熱心網友回復:
首先,您永遠不應該使用裸露的except.
其次,由于您的函式翻譯單個單詞并將翻譯后的單詞和檢測到的語言作為元組回傳,因此要實作所需的翻譯單詞串列和單一檢測到的語言的輸出將是困難和乏味的。相反,修改你的函式來這樣做:
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話。
另請注意,為了使其作業,您必須假設給定串列中的所有單詞都是相同的語言。如果這不是您可以做出的假設,那么您需要弄清楚其他事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476624.html
上一篇:熊貓在兩個分位數之間分組選擇值
