繁体   English   中英

将 function 应用于 df 列中列表中的每个元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM