如何使用pandas将CSV指定列范围内的重复值替换为空字符串
Pandas实现跨指定列范围去重、仅保留首次出现值的方案
核心逻辑
你的需求本质是跨多列按固定遍历顺序做全局值去重,不需要删除整行,只需要把非首次出现的重复值替换为空即可,不需要写复杂循环,用pandas原生的行列转换方法就能快速实现。
实现步骤
- 选定需要处理的三列,按照「逐行从上到下读取、单行列顺序从phone1到phone3」的优先级展平为一维序列,这个顺序就是值“首次出现”的判定依据
- 对展平后的一维序列调用
duplicated()方法,自动标记所有非首次出现的重复值 - 将标记结果还原为原三列的形状,把标记为重复的位置统一替换为空字符串,写回原数据集即可
可直接运行的代码示例
import pandas as pd # 替换为你的CSV文件实际路径 df = pd.read_csv("input.csv") # 配置需要做跨列去重的字段,列表顺序决定同值优先保留的位置优先级 process_columns = ["phone1", "phone2", "phone3"] # 展平多列后标记重复值,再还原为原表结构 duplicate_mask = df[process_columns].stack().duplicated().unstack() # 所有重复位置替换为空字符串 df[process_columns] = df[process_columns].mask(duplicate_mask, "") # 导出处理完成的结果 df.to_csv("output.csv", index=False)
补充说明
- 该方案默认不会将原始数据中的空值判定为重复值,避免误替换正常的空字段
- 如果需要调整同值保留的优先级,比如优先保留phone3列的号码,只需要调整
process_columns列表内的字段顺序即可 - 处理全程不会改动非目标列(id、name)的内容,也不会删除任何数据行,完全匹配需求规则
内容的提问来源于stack exchange,提问作者happones
相关产品推荐
相关产品推荐

