如何用labels.csv的英文标签替换data.csv中的对应标签?
解决CSV标签匹配与替换问题
问题根源
你的代码无法正常执行是因为两个CSV的labels列格式不匹配:
data.csv的labels字段带双引号,且可能包含多个用逗号分隔的标签(比如"/m/09x0r,/t/dd00088")labels.csv的labels是单个纯标签(比如/m/09x0r)
这种情况下直接用pd.merge完全无法匹配,必须先统一格式再做映射。
解决方案步骤
1. 读取并预处理数据
先读取两个文件,同时把labels.csv转换成标签-英文释义的映射字典,这样查询效率最高。
2. 处理data.csv的标签列
编写一个自定义函数,完成以下操作:
- 去掉标签字符串前后的双引号
- 按逗号拆分多个标签
- 用映射字典把每个标签替换成对应的英文释义
- 将替换后的多个英文释义重新拼接成字符串
3. 生成结果并保存
将处理后的英文标签存入data.csv的新列,最后导出文件。
完整代码
import pandas as pd # 读取两个CSV文件 df_data = pd.read_csv('data.csv') df_labels = pd.read_csv('labels.csv') # 构建标签到英文释义的映射字典,同时去掉labels_en的引号 label_map = df_labels.set_index('labels')['labels_en'].str.strip('"').to_dict() # 定义标签转换函数 def convert_labels(label_str): # 去除前后双引号 cleaned_labels = label_str.strip('"') # 拆分多个标签 label_list = cleaned_labels.split(',') # 映射每个标签到英文,找不到的保留原标签(可根据需求调整) en_label_list = [label_map.get(label.strip(), label.strip()) for label in label_list] # 拼接成字符串 return ', '.join(en_label_list) # 生成新的labels_en列 df_data['labels_en'] = df_data['labels'].apply(convert_labels) # 保存处理后的文件 df_data.to_csv('modified_data.csv', index=False)
说明
- 如果
data.csv的标签之间存在空格(比如"/m/09x0r , /t/dd00088"),代码里的label.strip()会自动去除每个标签的前后空格。 - 如果遇到
labels.csv中没有的标签,代码会保留原标签字符串,你可以根据需求修改(比如替换成"Unknown")。
内容的提问来源于stack exchange,提问作者rusty_vibess
相关产品推荐
相关产品推荐

