将函数应用于 df 列中列表中的每个元素
Apply function to every element in a list in a df column
如何将函数应用于数据框每一行中列表中的每个元素?
df:
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
有什么帮助吗?
第一,.
其次,因为您的函数翻译单个单词和 returns 翻译后的单词和检测到的语言作为一个元组,所以要实现您想要的翻译单词列表输出和一个单一检测到的语言。相反,请修改您的函数来执行此操作:
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
has a language detection method。它在 3.0.0
中不起作用,但如果你 pip install googletrans==4.0.0rc1
它会起作用。
另请注意,为了使其正常工作,您必须假设给定列表中的所有单词都是同一种语言。如果这不是您可以做出的假设,则您需要想出其他办法。
如何将函数应用于数据框每一行中列表中的每个元素?
df:
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
有什么帮助吗?
第一,
其次,因为您的函数翻译单个单词和 returns 翻译后的单词和检测到的语言作为一个元组,所以要实现您想要的翻译单词列表输出和一个单一检测到的语言。相反,请修改您的函数来执行此操作:
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
has a language detection method。它在 3.0.0
中不起作用,但如果你 pip install googletrans==4.0.0rc1
它会起作用。
另请注意,为了使其正常工作,您必须假设给定列表中的所有单词都是同一种语言。如果这不是您可以做出的假设,则您需要想出其他办法。