如何使用Python剥离CSV单元格冗余值仅保留locID字段
Python实现CSV位置列清洗方案
核心思路
目标位置列的单元格内容为固定三元组结构,每个[]包裹的块内第一个元素就是需要保留的locID,只需拆分每个独立块、提取locID部分、再按原格式拼接即可。如果存在格式不统一的异常数据,也可以用正则匹配做兜底处理。
具体实现步骤
- 依赖准备:使用pandas处理CSV读写,未安装的话先执行
pip install pandas - 编写逐单元格的内容清洗逻辑
- 将清洗逻辑应用到目标列,导出结果文件
完整可运行代码
import pandas as pd # 1. 读取原始CSV文件,替换为你自己的文件实际路径 df = pd.read_csv("你的原始数据文件.csv", encoding="utf-8") def clean_location_cell(cell_val): # 空值直接返回,避免运行报错 if pd.isna(cell_val): return cell_val # 拆分所有独立的[xxx]位置块 blocks = [b.strip() for b in cell_val.split("],") if b.strip()] cleaned_ids = [] for block in blocks: # 去除块首尾的括号,按逗号拆分取第一段即为locID loc_id = block.strip("[]").split(",")[0].strip() cleaned_ids.append(f"[{loc_id}]") # 拼接为要求的输出格式 return ", ".join(cleaned_ids) # 2. 应用清洗函数到位置列,把"位置"替换为你表中该列的实际列名 df["位置"] = df["位置"].apply(clean_location_cell) # 3. 导出清洗完成的文件 df.to_csv("清洗完成的数据.csv", index=False, encoding="utf-8-sig")
效果验证
使用你给出的样例测试:
原始单元格内容:
[locID 1, countyname, statename], [locID 2, countyname, statename]
清洗后输出:[locID 1], [locID 2]
格式异常兜底方案
如果部分单元格存在逗号数量不对、空格混乱的情况,可以用正则直接匹配locID + 数字的模式提取,将上述清洗函数替换为以下版本即可:
import re def clean_location_cell(cell_val): if pd.isna(cell_val): return cell_val # 直接匹配所有locID开头的片段 loc_ids = re.findall(r"locID\s*\d+", cell_val) return ", ".join([f"[{id}]" for id in loc_ids])
内容的提问来源于stack exchange,提问作者oda17
相关产品推荐
相关产品推荐

