如何使用Pandas替换CSV指定列数据且不破坏原有结构
CSV指定字段匹配替换实现方案
需求说明
需要基于基准ID位置映射数据,对目标CSV文件的指定字段做匹配替换,替换完成后删除冗余字段。
- 基准映射数据存放于
service_block.xlsx的sheet2中 - 待替换目标文件为
Serp.csv
现有可运行代码
import pandas as pd df1= pd.read_excel("serp.xlsx", header=None) df2= pd.read_excel("flocnam.xlsx", header=None) df1 = df1[0].str.split(";", expand=True) df1[4] = df1[4].apply(lambda x: v[-1] if (v := x.split()) else "") df2[1] = df2[1].apply(lambda x: x.split("-")[0]) m = dict(zip(df2[1], df2[0])) df1[4]= df1[4].replace(m) print(df1) df1.to_csv ("test.csv")
问题排查
现有代码输出不符合预期的核心原因如下:
- 文件读取逻辑错误:目标文件为CSV格式,不应使用
read_excel读取 - 输出未丢弃索引列,导致结果多了冗余的序号列
- 未显式删除不需要的高亮冗余字段
- 未指定输出编码,可能出现中文乱码
修复后代码
import pandas as pd # 读取基准ID映射表,指定读取sheet2 df_map = pd.read_excel("service_block.xlsx", sheet_name="Sheet2", header=None) # 构建ID-位置映射字典 id_loc_map = dict(zip(df_map[1].apply(lambda x: x.split("-")[0]), df_map[0])) # 读取待替换CSV文件,按分号分隔 df_target = pd.read_csv("Serp.csv", sep=";", header=None) # 提取待匹配的ID字段 df_target[4] = df_target[4].apply(lambda x: x.split()[-1] if x.strip() else "") # 替换为对应位置信息,未匹配到的保留原值 df_target[4] = df_target[4].map(id_loc_map).fillna(df_target[4]) # 删除不需要的冗余列,可根据实际需要删除的列索引调整列表值 df_result = df_target.drop(columns=[0, 2, 3], errors="ignore") # 输出最终结果,不保留索引,适配中文编码 df_result.to_csv("final_result.csv", index=False, encoding="utf-8-sig")
注意:
drop方法中的列索引请按照你实际要删除的高亮字段的位置调整,若你的CSV有表头可直接传入列名进行删除,准确性更高。
内容的提问来源于stack exchange,提问作者Its OK
相关产品推荐
相关产品推荐

