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

如何使用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")

问题排查

现有代码输出不符合预期的核心原因如下:

  1. 文件读取逻辑错误:目标文件为CSV格式,不应使用read_excel读取
  2. 输出未丢弃索引列,导致结果多了冗余的序号列
  3. 未显式删除不需要的高亮冗余字段
  4. 未指定输出编码,可能出现中文乱码

修复后代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:45:03