簡體   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