Python处理Stata西班牙数据集:数值标签翻译对应异常修复求助
解决Stata数值标签翻译后编码错乱问题
问题说明
有一个包含2500+变量的西班牙语Stata数据集,需将数值标签(value labels)翻译为英文。使用Google API测试时,选取10条观测值和p4、p5两个变量,出现数值标签对应错误:原p4变量的数值编码为4、6、7、8、9、10,翻译后的数据集里p4的编码变为0-5,原编码与标签的对应关系完全错乱。
问题根源
原代码中直接替换分类变量的标签文本后重新转换为category类型,pandas会自动生成从0开始的新编码,完全丢失了Stata数据集中原始的数值编码与标签的对应关系。
修改后的代码
import pandas as pd from googletrans import Translator from pandas.io.stata import StataReader # 初始化翻译器 translator = Translator() # 读取Stata数据集,保留原始数值编码 reader = StataReader('C:\\transl_trial.dta') df = reader.read(convert_categoricals=False) # 获取所有变量的原始value labels映射 value_labels = reader.value_labels() # 需要翻译的变量列表 columns_to_translate = ['p4', 'p5'] for col in columns_to_translate: # 获取当前变量的原始数值-标签映射 original_map = value_labels[col] # 翻译标签文本,保留原始数值编码 translated_map = {} for code, label in original_map.items(): translated_text = translator.translate(label, src='es', dest='en').text translated_map[code] = translated_text # 将变量转换为带有原始编码和翻译后标签的分类变量 df[col] = pd.Categorical(df[col], categories=translated_map.keys(), ordered=False) df[col].cat.rename_categories(translated_map, inplace=True) # 保存翻译后的数据集 output_path = r'C:\\translated_dataset.dta' df.to_stata(output_path, write_index=False)
关键改动说明
- 使用
StataReader读取数据,通过convert_categoricals=False保留原始的数值编码,而非直接转换为pandas默认的分类编码。 - 从
reader.value_labels()获取Stata原生的数值-标签映射,确保翻译时不会丢失原始编码信息。 - 重新创建分类变量时,指定
categories为原始数值编码,再用翻译后的标签重命名分类,完全保留原编码与标签的对应关系。
内容的提问来源于stack exchange,提问作者Aleesha
相关产品推荐
相关产品推荐

