使用Pandas+GoogleTrans翻译DataFrame嵌套字典文本列报错求助
问题分析
报错的核心原因是googletrans的translate()方法无法直接处理字典、列表这类嵌套结构,而且当翻译请求返回None(比如空字符串、网络异常)时,调用.text属性就会触发AttributeError。
解决方案
需要编写一个递归函数,遍历嵌套结构里的所有字符串进行翻译,同时处理空值和异常情况:
import pandas as pd from googletrans import Translator import time # 可选,用于添加延迟避免接口限制 translator = Translator() def translate_nested(obj, dest='en'): # 处理字符串:空串直接返回,非空串尝试翻译 if isinstance(obj, str): if not obj.strip(): return obj try: # 可选:加延迟,避免频繁请求被限制 time.sleep(0.5) trans_result = translator.translate(obj, dest=dest) return trans_result.text if trans_result else obj except Exception: # 翻译失败时返回原字符串 return obj # 处理列表:递归翻译每个元素 elif isinstance(obj, list): return [translate_nested(item, dest) for item in obj] # 处理字典:递归翻译每个值 elif isinstance(obj, dict): return {key: translate_nested(value, dest) for key, value in obj.items()} # 其他类型直接返回 else: return obj # 应用到DataFrame的text列 df['text2'] = df['text'].apply(translate_nested)
关键说明
- 递归遍历:自动处理字典里的列表、嵌套字典等多层结构,只针对字符串做翻译
- 异常防护:捕获翻译过程中的网络问题、接口限制等异常,保证程序不崩溃
- 空值处理:跳过空字符串的翻译,避免无效请求
- 延迟控制:可选添加
time.sleep(),防止短时间内请求过多被翻译接口限制
内容的提问来源于stack exchange,提问作者Nikita Agarwal
相关产品推荐
相关产品推荐

