Python 使用googletrans成批转换Pandas数据帧中的字符串

Python 使用googletrans成批转换Pandas数据帧中的字符串,python,pandas,loops,optimization,Python,Pandas,Loops,Optimization,我正在尝试翻译熊猫数据框列中约200000行的单词。看起来是这样的: df =| review | rating | | love it | 5 | | hate it | 1 | | its ok | 3 | | great | 4 | from googletrans import Translator translator = Translator() list1

我正在尝试翻译熊猫数据框列中约200000行的单词。看起来是这样的:

    df =| review  | rating | 
        | love it | 5      |
        | hate it | 1      |
        | its ok  | 3      |
        | great   | 4      | 
from googletrans import Translator
translator = Translator()
list1 = df.review.tolist()
translated = []
for i in range(0,len(df),50)):
    translated.extend([x.text for x in translator.translate(list1[i:i+50], src='en' , dest='id')])
df['translated_review'] = translated #add back to df
我正在尝试使用googletrans将其翻译成另一种语言,我已经看到了一些使用
df的解决方案。apply
将函数应用到每一行,但是在我的例子中,速度非常慢(翻译整个列大约需要16个小时)

然而,googletrans确实支持批量翻译,它将字符串列表作为参数,而不仅仅是单个字符串

我一直在寻找一种利用这一点的解决方案,我的代码如下所示:

    df =| review  | rating | 
        | love it | 5      |
        | hate it | 1      |
        | its ok  | 3      |
        | great   | 4      | 
from googletrans import Translator
translator = Translator()
list1 = df.review.tolist()
translated = []
for i in range(0,len(df),50)):
    translated.extend([x.text for x in translator.translate(list1[i:i+50], src='en' , dest='id')])
df['translated_review'] = translated #add back to df

但它仍然很慢。有谁能解释一下如何进一步优化这个问题吗?

也许你可以尝试用
numpy.array
来重塑这个专栏,例如:

translated = []
for row in df.review.values.reshape((-1, 50)):
    translated.append(translator.translate(row, src='en', dest='id'))
请注意,
df.review
系列的长度必须能被50整除,才能使
重塑
方法起作用。如果不是,请选择另一个值或将序列修剪为50的倍数


进一步的改进是并行化翻译。为此,您应该研究Python中的并行处理,例如,.

也许您可以尝试将列的形状改为
numpy.array,例如:

translated = []
for row in df.review.values.reshape((-1, 50)):
    translated.append(translator.translate(row, src='en', dest='id'))
请注意,
df.review
系列的长度必须能被50整除,才能使
重塑
方法起作用。如果不是,请选择另一个值或将序列修剪为50的倍数


进一步的改进是并行化翻译。为此,您应该研究Python中的并行处理,即。

得到了一个值错误:无法将大小为209729的数组重塑为形状(50)多么有趣的数字:209729=13*13*17*73,因此您可以使用其中一个除数(即17或73)或其乘积(即169)获取值错误:无法将大小为209729的数组重塑为形状(50)多么有趣的数字:209729=13*13*17*73,因此可以使用其中一个除数(即17或73)或其乘积(即169)作为列数而不是50。