You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:27:23