如何清理pandas DataFrame部门列冗余字符实现同部门值统一
pandas 批量统一Department列格式高效方案
核心需求是跳过前缀的不规则部门编码,从首个字符D开始截取完整部门名称,无需手动逐一枚举替换,用pandas原生字符串处理即可实现全量数据毫秒级清洗,具体实现如下:
核心实现代码
先构造测试数据复现对应场景:
import pandas as pd # 测试数据集,覆盖两种前缀格式、带逗号的部门名场景 df = pd.DataFrame({ 'Date': ['2024-01-01', '2024-01-02', '2024-01-03'], 'Department': [ 'S220- Department of Transport', 'S220 Department of Transport', 'A103- Department of Finance, Taxation and Treasury' ] })
高性能向量化写法(推荐,十万级以上数据优先用)
不需要写循环,直接用pandas字符串向量化接口定位首个D的位置做切片即可:
# 定位每个字符串中第一个"D"的索引,从该位置截取到字符串末尾 df['Department'] = df['Department'].str[df['Department'].str.find('D'):]
带脏数据兜底的写法
如果担心存在没有D的异常脏数据,可以加判断逻辑,异常值保留原值方便后续排查:
def clean_department(s: str) -> str: d_start_index = s.find('D') # 找到D就截取,没找到返回原始值 return s[d_start_index:] if d_start_index != -1 else s df['Department'] = df['Department'].apply(clean_department)
处理效果验证
执行清洗后打印部门唯一值:
print(df['Department'].unique())
输出结果如下,两种前缀的同部门值完全统一,带逗号的部门名完整保留:
['Department of Transport' 'Department of Finance, Taxation and Treasury']
此时再执行pivot或pivot_table操作,同一部门会被正确识别为同一维度,不会出现拆分错误。
方案优势
- 不需要提前维护数百个部门的编码映射表,不管前缀是「编码+横杠+空格」「编码+空格」还是其他不规则格式,只要部门名固定以
D开头就能正确清洗 - 完整保留
D右侧所有内容,包括部门名称内的逗号、空格、特殊符号,不会出现内容误删 - 向量化实现性能远高于逐行替换、正则匹配循环,百万行以内数据都能秒级处理完成
内容的提问来源于stack exchange,提问作者Mihan
相关产品推荐
相关产品推荐

