First: I would create GoogleTranslator()
only once.
And you don't need to use lambda x:
if translate
gets only one value.
gt = GoogleTranslator(source='auto', target='en')
data_en.gender = data_en.gender.apply(gt.translate)
If you want to translate some columns then you can use for
-loop
for col in ["gender", "other"]:
data_en[ col ] = data_en[ col ].apply(gt.translate)
Or you can use applymap
data_en[ ["gender", "other"] ] = data_en[ ["gender", "other"] ].applymap(gt.translate)
which works also for all cells
data_en = data_en.applymap(gt.translate)
And if you need to do something more complex in row then you can use axis=1
(This example can be done in simpler way but I have no better example)
def convert(row):
row['gender'] = gt.translate(row['gender'])
# first char from gender
row['other'] = row['gender'][0]
return row
data_en = data_en.apply(convert, axis=1)
Minimal working example
import pandas as pd
from deep_translator import GoogleTranslator
df = pd.DataFrame({
'Gender': ['mężczyna', 'kobieta'],
'Other' : ['pies', 'kot'],
# 'Number': [1, 2],
})
print(df)
gt = GoogleTranslator(source='pl', dest='en')
# -----------------
df_en = df.copy()
for col in ['Gender', 'Other']:
df_en[col] = df_en[col].apply(gt.translate)
print(df_en)
# -----------------
df_en = df.copy()
df_en[ ['Gender', 'Other'] ] = df_en[ ['Gender', 'Other'] ].applymap(gt.translate)
print(df_en)
# -----------------
df_en = df.copy()
df_en = df_en.applymap(gt.translate)
print(df_en)
# -----------------
df_en = df.copy()
def convert(row):
row['Gender'] = gt.translate(row['Gender'])
# first char from gender = `F` or `M`
row['Other'] = row['Gender'][0]
return row
df_en = df_en.apply(convert, axis=1)
print(df_en)