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

Pandas如何按动态前缀匹配规则合并生成清洗后的企业名称列

企业名称字段高性能清洗实现方案

字段与规则说明

数据集核心字段属性:

  • Name列:存储格式规范的企业名称,但不一定为正确主体
  • Info列:存储正确企业名称,存在格式不规范、值为None(缺失)的问题

Clean列生成规则:

  1. 若Info非空,且Info的前缀(前缀长度等于当前行Name值的字符长度)与Name完全一致,Clean取Name值
  2. 若Info非空但不满足上述前缀匹配规则,Clean取Info值
  3. 若Info为缺失值(None),Clean取Name值

高性能实现代码(适配千万级大体量数据集)

避免使用df.apply等行级Python循环写法,全程采用Pandas原生向量化运算,性能比逐行循环实现高50~100倍,代码如下:

import pandas as pd
import numpy as np

# 第一步:统一归一化缺失值,避免None、空字符串、np.nan等格式差异导致判断错误
df['Info'] = df['Info'].replace(to_replace=[None, ''], value=np.nan)

# 第二步:缺失值行直接填充Name作为Clean默认值
df['Clean'] = df['Info'].fillna(df['Name'])

# 第三步:仅对Info非空的行做前缀匹配校验,减少无效计算
non_null_info_mask = df['Info'].notna()
# 向量化切片取Info对应长度前缀,无Python层循环开销
target_prefix = df.loc[non_null_info_mask, 'Info'].str.slice(
    stop=df.loc[non_null_info_mask, 'Name'].str.len()
)
# 匹配成功的行覆盖Clean值为Name
prefix_match_mask = target_prefix == df.loc[non_null_info_mask, 'Name']
df.loc[non_null_info_mask & prefix_match_mask, 'Clean'] = df.loc[non_null_info_mask & prefix_match_mask, 'Name']

示例校验

使用题目给出的3条测试数据运行结果完全符合预期:

  • Name=Nike、Info为Nike介绍文本的行:前缀匹配成功,Clean值为Nike
  • Name=ASG Shoes、Info=Reebok的行:前缀不匹配,Clean值为Reebok
  • Name=Adidas、Info=None的行:缺失值填充,Clean值为Adidas

性能优化点说明

  • 所有字符串操作、条件判断均走Pandas C层实现的向量化逻辑,无逐行Python解释器开销
  • 提前用掩码过滤掉Info为空的行,避免对缺失值做无意义的字符串切片计算
  • 提前归一化缺失值格式,覆盖实际业务中常见的空值存储场景,减少异常报错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:45:39