Создайте переменную в python со значениями из каждой строки столбца

#python #pandas #list #loops #dictionary

#python #pandas #Список #циклы #словарь

Вопрос:

Я хочу использовать следующий код, чтобы перевести текст из определенных столбцов моего df и экспортировать его в тот же df. Код работает, за исключением случая, когда значение столбца пустое / пустое. Кроме того, значения для моего SourceLanguageCode и TargetLanguageCode находятся в каждой строке столбцов ‘source’ и ‘target’ в моем df, поскольку они разные для каждой строки, поэтому их можно прочитать оттуда и не указывать язык в параметрах?

 cols_to_translate = ['text1', 'text2', 'text3']
 for col in cols_to_translate:
    df[f'translated_{col}'] = df[col].apply(lambda x: translate.translate_text(Text=x,
       SourceLanguageCode='en', TargetLanguageCode='fr').get('TranslatedText')
 

введите описание изображения здесь

Это должно привести к чему-то вроде этого

 cols_to_translate = ['text1', 'text2', 'text3']
for col in cols_to_translate:
  df[f'translated_{col}'] = df[col].apply(lambda x: translate.translate_text(Text=x,
    SourceLanguageCode=sc, TargetLanguageCode=tg).get('TranslatedText')
 

Где tg должно быть эквивалентно каждой строке для столбца ‘target’, а sc эквивалентно для строк в столбце ‘source’ при переводе по строкам, но я не знаю, как выразить это на python

Ответ №1:

 def translate(row, text_col):
    return translate.translate_text(
            Text=row[col],
            SourceLanguageCode=row.source, 
            TargetLanguageCode=row.target).get('TranslatedText')



cols_to_translate = ['text1', 'text2', 'text3']
for col in cols_to_translate:
    df[f'translated_{col}'] = df.apply(lambda row: translate(row, col), axis=1)
 

Комментарии:

1. спасибо, но возвращает эту ошибку: AttributeError: объект ‘function’ не имеет атрибута ‘translate_text’

2. Пожалуйста, всегда при публикации кода добавляйте описание того, как этот код работает и как он решает проблему.

3. @ruslantau, большое спасибо, что уделили время, на первый взгляд все работает, перепроверит и отметит ответ как правильный, если все хорошо. Еще раз, огромное спасибо!!