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

Pandas数据帧MODELLO列正则归一化分组至FAMIGLIA列的优化问题

优化解决方案

针对百万级DataFrame的字符串归一化需求,推荐使用Pandas矢量化字符串操作替代逐行apply,既解决原方法保留无关值的问题,又大幅提升处理效率:

步骤1:初始化目标列

先将FAMIGLIA列初始化为空值,确保只有匹配规则的行才会被赋值:

import pandas as pd

df['FAMIGLIA'] = pd.NA

步骤2:定义匹配规则并批量处理

将归一化规则整理为列表,通过矢量化的str.contains和str.replace批量处理,避免Python循环的低效:

# 规则列表:(正则匹配模式, 替换模板/值)
normalize_rules = [
    # 匹配RC开头+数字+-+数字,提取RC开头的核心部分
    (r'(RC\d+)-\d+', r'\1'),
    # 精确匹配"CESPRO 998 CI",替换为"RO998CI"(^$确保完全匹配,避免部分匹配干扰)
    (r'^CESPRO 998 CI$', 'RO998CI')
]

for pattern, replacement in normalize_rules:
    # 筛选匹配当前规则的行
    match_mask = df['MODELLO'].str.contains(pattern, na=False, regex=True)
    # 对匹配行执行替换并赋值
    df.loc[match_mask, 'FAMIGLIA'] = df.loc[match_mask, 'MODELLO'].str.replace(pattern, replacement, regex=True)

关键优化点说明

  1. 效率提升:Pandas的str系列方法基于C实现矢量化操作,相比apply逐行调用Python函数,处理190万行数据的速度可提升数倍甚至数十倍。
  2. 精准控制:通过match_mask筛选目标行,仅对符合规则的行赋值,避免无关值(如'WIN')进入FAMIGLIA列。
  3. 正则分组支持:str.replace原生支持正则分组引用(如\1),解决了直接用loc赋值无法使用分组的问题。

扩展建议

后续新增归一化规则时,只需在normalize_rules列表中新增元组即可,无需修改核心逻辑,维护性更强。

内容的提问来源于stack exchange,提问作者Jhonny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:45:37