Python pandas:通过将存储在不同列中的值转换为中文繁体,用英文创建一个新列

Python pandas:通过将存储在不同列中的值转换为中文繁体,用英文创建一个新列,python,pandas,translate,pypi,Python,Pandas,Translate,Pypi,我在熊猫数据框中有一列“City\u trad\u chinese”,其中包含繁体中文的值。我需要创建另一列“City_English”,该列必须包含翻译后的英语值 如何使用Python实现这一点?我尝试了以下方法: #importing required libraries import pandas as pd from os import path from googletrans import Translator #setting path to data path2data

我在熊猫数据框中有一列
“City\u trad\u chinese”
,其中包含繁体中文的值。我需要创建另一列
“City_English”
,该列必须包含翻译后的英语值

如何使用Python实现这一点?我尝试了以下方法:

#importing required libraries
import pandas as pd 

from os import path

from googletrans import Translator

#setting path to data
path2data = 'C:/Users/data'

# data import
df = pd.read_excel(path.join(path2data, 'data.xlsx'), converters={'City_trad_chinese':str})


translator = Translator()

df['City_English'] = df['City_trad_chinese'].map(lambda x: translator.translate(x, src="zh-TW", dest="en").text)
但这给了我一个错误:

raise JSONDecodeError("Expecting value", s, err.value) from None

JSONDecodeError: Expecting value

您可以使用库
googletrans

import pandas as pd
from googletrans import Translator

d = {"City_trad_chinese":["香港特别行政区",
                          "澳门特别行政区",
                          "北京市",
                          "上海市"]}
df = pd.DataFrame(data=d)

translator = Translator()

df["City_English"] = df["City_trad_chinese"].map(lambda x: translator.translate(x, src="zh-TW", dest="en").text)


注意:谷歌翻译API有一个。您可以通过单独转换每一行来绕行:

df["City_English"] = ""

for index, row in df.iterrows():
    translator = Translator()
    eng_text = translator.translate(row["City_trad_chinese"], src="zh-TW", dest="en").text
    row["City_English"] = eng_text

有什么方法可以用一个命令翻译整个专栏吗?@Architgupta-use
df['eng']=df['chinese'].map(lambda x:translator.translate(x,src=“zh TW”,dest=“en”).text)
它抛出错误:从None@Architgupta可能有助于解决该问题
出现错误的原因是“数据”的类型为bytes,因此在使用json.loads将其转换为json对象之前,必须将其解码为字符串。“
我已从excel文件导入数据,并且在导入时也已将特定列转换为字符串。出现错误的原因似乎是使用google translate api一次可以翻译的字符数量受到限制。如果超过这个限制(15k),google只会用一个空的json来响应。声称如果它仍然不起作用,将其减少到5k个字符块就可以解决这个问题。
df["City_English"] = ""

for index, row in df.iterrows():
    translator = Translator()
    eng_text = translator.translate(row["City_trad_chinese"], src="zh-TW", dest="en").text
    row["City_English"] = eng_text