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

Python文本替换函数误删数字问题求助

问题解决:清理DataFrame列名时保留数字

问题原因

你的函数里的正则表达式r"[()\[\]&^%$#@!-:'\/]"存在关键错误:字符集中的-放在!和:之间时,会被解析为ASCII字符范围(!的ASCII码是33,:是58),而数字字符(ASCII 48-57)正好落在这个范围内,导致正则把数字也一并删除,最终丢失了10706。

修复后的函数

将-移到字符集的开头或结尾,避免被识别为范围符号,同时优化代码逻辑减少重复操作:

import re

def text_replacement(x):
    """
    格式化字段名,使其更符合SQL规范
    """
    # 先处理自定义字段替换
    for key, value in custom_fields_dict.items():
        pattern = re.compile(key, re.IGNORECASE)
        x = pattern.sub(value, x)
    
    # 统一处理字符串格式,放在循环外避免重复执行
    x = (x.lower()
         .replace('fields.', '')
         .replace(' ', '_')
         .replace('™', ''))
    
    # 修正正则:把-移到字符集末尾,仅匹配减号本身
    x = re.sub(r"[()\[\]&^%$#@!:'\/-]", '', x)
    
    return x

# 测试示例
test_str = "standard_access_requested_application:_'role/group': ]ld_10706(e)™"
print(text_replacement(test_str))
# 输出:standard_access_requested_application_rolegroup_ld_10706e

优化说明

  1. 正则修正:将-移到字符集末尾,确保它只匹配减号,不再覆盖数字范围
  2. 逻辑优化:把lower()、replace()等通用处理放在循环外,避免每次循环重复执行,提升性能
  3. 保留数字:修复后正则仅删除指定特殊符号,数字会被完整保留

DataFrame列名替换简化写法

可以用列表推导式简化列名替换代码:

df.columns = [text_replacement(col) for col in df.columns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:35:26