在Pandas中的Lambda函数中使用条件语句发出

2024-04-29 14:41:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试翻译数据集中所有名为tweet_text的列。我有大约100000行数据,其中大约50%需要翻译成英语

下面的代码可以工作,但我基本上运行的功能,翻译每一行的tweets,这需要将近2个小时

注意:x != " "检查tweet是否为空字符串,因为我从其中删除了一些emojis后,一些tweet刚刚" ",剩下的就这些了

Link to deep-translator

from deep_translator import GoogleTranslator
import swifter
import pandas as pd 

df_bdtu['tweet_text'] = df_bdtu.tweet_text.swifter.apply(lambda x: GoogleTranslator(source='auto', target='en').translate(x) if x != " " else None)

所以为了加快速度,我试着只在它们不是英语的情况下翻译它们,因为我有一个列,列明tweet的语言,名为lang

在这里,我只是在两列上循环并翻译tweet_text

  1. 如果tweet不是" "
  2. 如果tweet不在English
df_bdtu[['tweet_text', 'lang']].swifter.apply(lambda x: GoogleTranslator(source='auto', target='en').translate(x['tweet_text']) if (x['tweet_text'] != " " and x['lang'] != "en") else None, axis = 1)

但是我得到了一个错误,这表明我在一次翻译中传递了所有的文本,而我似乎无法修复它。我也对加快这一进程持开放态度

错误:

deep_translator.exceptions.NotValidPayload:  --> text must be a valid text with maximum 5000 character, otherwise it cannot be translated

数据帧:

data = {'tweet_text': ['100 Arsenal appearances. Congratulations, Rob! ', "     Lundi soir dans l'émission ,     et   ont débriefé la victoire dans le Der...", '  È in corso la votazione tra le 4 figurine finaliste!', '   y’a absolument zéro vanne l’avis est désastreux. ', 'FINAL  1-3 ¡El   firma una gran remontada en su primera victoria de 2021!  ... ', '  JÁ HÁ ONZE!   ', 'HALF-TIME Southampton 1-0 LiverpoolDanny Ings’ brilliant early opener is the difference at the break ', "10' Une-deux parfaitement exécuté entre Tino et   Notre capitaine voit sa frappe passer au-dessus. 0-0 ", '  ¡INCREÍBLE, DOS SANTOS!          ', '   +3     '], 'lang': ['en', 'fr', 'it', 'fr', 'es', 'pt', 'en', 'fr', 'es', 'und']}
df = pd.DataFrame(data)

                                                                                               tweet_text lang
                                                          100 Arsenal appearances. Congratulations, Rob!    en
                         Lundi soir dans l'émission ,     et   ont débriefé la victoire dans le Der...   fr
                                                    È in corso la votazione tra le 4 figurine finaliste!   it
                                                      y’a absolument zéro vanne l’avis est désastreux.    fr
                          FINAL  1-3 ¡El   firma una gran remontada en su primera victoria de 2021!  ...    es
                                                                                         JÁ HÁ ONZE!      pt
    HALF-TIME Southampton 1-0 LiverpoolDanny Ings’ brilliant early opener is the difference at the break    en
10' Une-deux parfaitement exécuté entre Tino et   Notre capitaine voit sa frappe passer au-dessus. 0-0    fr
                                                                       ¡INCREÍBLE, DOS SANTOS!             es
                                                                                                  +3       und

Tags: the数据textledflangesde
1条回答
网友
1楼 · 发布于 2024-04-29 14:41:00
  • 代码在提供的示例中运行良好,因此向示例数据帧中添加了额外的行,这将导致exceptions
  • try - except编写一个函数来捕获无效行。
  • 请注意,下面的代码没有使用import swifter,因为它是一个用于加速.apply的模块,测试时不需要它
import pandas as pd
from deep_translator import GoogleTranslator as GT
from deep_translator import exceptions as excp

# sample dataframe
data = {'tweet_text': ['100 Arsenal appearances. Congratulations, Rob! ', "     Lundi soir dans l'émission ,     et   ont débriefé la victoire dans le Der...", '  È in corso la votazione tra le 4 figurine finaliste!', '   y’a absolument zéro vanne l’avis est désastreux. ', 'FINAL  1-3 ¡El   firma una gran remontada en su primera victoria de 2021!  ... ', '  JÁ HÁ ONZE!   ', 'HALF-TIME Southampton 1-0 LiverpoolDanny Ings’ brilliant early opener is the difference at the break ', "10' Une-deux parfaitement exécuté entre Tino et   Notre capitaine voit sa frappe passer au-dessus. 0-0 ", '  ¡INCREÍBLE, DOS SANTOS!          ', '   +3     ', "Quoique ce détail ne touche en aucune manière au fond même de ce que nous avons à raconter, il n'est peut-être pas inutile, ne fût-ce que pour être exact en tout, d'indiquer ici les bruits et les propos qui avaient couru sur son compte au moment où il était arrivé dans le diocèse. Vrai ou faux, ce qu'on dit des hommes tient souvent autant de place dans leur vie et surtout dans leur destinée que ce qu'ils font. M. Myriel était fils d'un conseiller au parlement d'Aix; noblesse de robe. On contait de lui que son père, le réservant pour hériter de sa charge, l'avait marié de fort bonne heure, à dix-huit ou vingt ans, suivant un usage assez répandu dans les familles parlementaires. Charles Myriel, nonobstant ce mariage, avait, disait-on, beaucoup fait parler de lui. Il était bien fait de sa personne, quoique d'assez petite taille, élégant, gracieux, spirituel; toute la première partie de sa vie avait été donnée au monde et aux galanteries. La révolution survint, les événements se précipitèrent, les familles parlementaires décimées, chassées, traquées, se dispersèrent. M. Charles Myriel, dès les premiers jours de la révolution, émigra en Italie. Sa femme y mourut d'une maladie de poitrine dont elle était atteinte depuis longtemps. Ils n'avaient point d'enfants. Que se passa-t-il ensuite dans la destinée de M. Myriel? L'écroulement de l'ancienne société française, la chute de sa propre famille, les tragiques spectacles de 93, plus effrayants encore peut-être pour les émigrés qui les voyaient de loin avec le grossissement de l'épouvante, firent-ils germer en lui des idées de renoncement et de solitude? Fut-il, au milieu d'une de ces distractions et de ces affections qui occupaient sa vie, subitement atteint d'un de ces coups mystérieux et terribles qui viennent quelquefois renverser, en le frappant au coeur, l'homme que les catastrophes publiques n'ébranleraient pas en le frappant dans son existence et dans sa fortune? Nul n'aurait pu le dire; tout ce qu'on savait, c'est que, lorsqu'il revint d'Italie, il était prêtre.Quoique ce détail ne touche en aucune manière au fond même de ce que nous avons à raconter, il n'est peut-être pas inutile, ne fût-ce que pour être exact en tout, d'indiquer ici les bruits et les propos qui avaient couru sur son compte au moment où il était arrivé dans le diocèse. Vrai ou faux, ce qu'on dit des hommes tient souvent autant de place dans leur vie et surtout dans leur destinée que ce qu'ils font. M. Myriel était fils d'un conseiller au parlement d'Aix; noblesse de robe. On contait de lui que son père, le réservant pour hériter de sa charge, l'avait marié de fort bonne heure, à dix-huit ou vingt ans, suivant un usage assez répandu dans les familles parlementaires. Charles Myriel, nonobstant ce mariage, avait, disait-on, beaucoup fait parler de lui. Il était bien fait de sa personne, quoique d'assez petite taille, élégant, gracieux, spirituel; toute la première partie de sa vie avait été donnée au monde et aux galanteries. La révolution survint, les événements se précipitèrent, les familles parlementaires décimées, chassées, traquées, se dispersèrent. M. Charles Myriel, dès les premiers jours de la révolution, émigra en Italie. Sa femme y mourut d'une maladie de poitrine dont elle était atteinte depuis longtemps. Ils n'avaient point d'enfants. Que se passa-t-il ensuite dans la destinée de M. Myriel? L'écroulement de l'ancienne société française, la chute de sa propre famille, les tragiques spectacles de 93, plus effrayants encore peut-être pour les émigrés qui les voyaient de loin avec le grossissement de l'épouvante, firent-ils germer en lui des idées de renoncement et de solitude? Fut-il, au milieu d'une de ces distractions et de ces affections qui occupaient sa vie, subitement atteint d'un de ces coups mystérieux et terribles qui viennent quelquefois renverser, en le frappant au coeur, l'homme que les catastrophes publiques n'ébranleraient pas en le frappant dans son existence et dans sa fortune? Nul n'aurait pu le dire; tout ce qu'on savait, c'est que, lorsqu'il revint d'Italie, il était prêtre.Quoique ce détail ne touche en aucune manière au fond même de ce que nous avons à raconter, il n'est peut-être pas inutile, ne fût-ce que pour être exact en tout, d'indiquer ici les bruits et les propos qui avaient couru sur son compte au moment où il était arrivé dans le diocèse. Vrai ou faux, ce qu'on dit des hommes tient souvent autant de place dans leur vie et surtout dans leur destinée que ce qu'ils font. M. Myriel était fils d'un conseiller au parlement d'Aix; noblesse de robe. On contait de lui que son père, le réservant pour hériter de sa charge, l'avait marié de fort bonne heure, à dix-huit ou vingt ans, suivant un usage assez répandu dans les familles parlementaires. Charles Myriel, nonobstant ce mariage, avait, disait-on, beaucoup fait parler de lui. Il était bien fait de sa personne, quoique d'assez petite taille, élégant, gracieux, spirituel; toute la première partie de sa vie avait été donnée au monde et aux galanteries. La révolution survint, les événements se précipitèrent, les familles parlementaires décimées, chassées, traquées, se dispersèrent. M. Charles Myriel, dès les premiers jours de la révolution, émigra en Italie. Sa femme y mourut d'une maladie de poitrine dont elle était atteinte depuis longtemps. Ils n'avaient point d'enfants. Que se passa-t-il ensuite dans la destinée de M. Myriel? L'écroulement de l'ancienne société française, la chute de sa propre famille, les tragiques spectacles de 93, plus effrayants encore peut-être pour les émigrés qui les voyaient de loin avec le grossissement de l'épouvante, firent-ils germer en lui des idées de renoncement et de solitude? Fut-il, au milieu d'une de ces distractions et de ces affections qui occupaient sa vie, subitement atteint d'un de ces coups mystérieux et terribles qui viennent quelquefois renverser, en le frappant au coeur, l'homme que les catastrophes publiques n'ébranleraient pas en le frappant dans son existence et dans sa fortune? Nul n'aurait pu le dire; tout ce qu'on savait, c'est que, lorsqu'il revint d'Italie, il était prêtre.", ['😀 😃 😄 😁 😆 😅 😂 🤣'], '😀 😃 😄 😁 😆 😅 😂 🤣'], 'lang': ['en', 'fr', 'it', 'fr', 'es', 'pt', 'en', 'fr', 'es', 'und', 'fr', 'sp', 'sp']}
df = pd.DataFrame(data)

# function to translate and catch exceptions
def translate(x):
    try:
        v = GT(source='auto', target='en').translate(x['tweet_text']) if (x['tweet_text'] != " " and x['lang'] != "en") else x['tweet_text']
    except (excp.NotValidPayload, excp.NotValidLength) as e:
        v = f'Translation Exception: {type(e)}'
    return v


# translate the column
df['translated'] = df[['tweet_text', 'lang']].apply(lambda x: translate(x), axis = 1)

# find rows with Translation Exception
not_translated = df[['tweet_text', 'lang', 'translated']][df['translated'].str.startswith('Translation Exception')]

相关问题 更多 >