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

如何修正Pandas处理CSV数据时的字符串替换错误?

CSV字符串转换代码修正

输入数据

ABCD0011
ABCD1404
ABCD1255

转换规则与输出对比

转换规则:保留字符串开头的字母部分,去除字母后数字部分的前导零,最终格式为[字母部分]_[去前导零的数字部分]_0

输入预期输出实际输出(原代码)
ABCD0011ABCD_11_0ABCD_0011_0
ABCD1404ABCD_1404_0ABCD_144_0
ABCD1255ABCD_1255_0ABCD_1255_0

原代码问题

原代码:

import numpy as np    
import pandas as pd    
df = pd.read_csv('Book1.csv')    
df.A = df.A.str.replace('[0-9]+', '')+'_'+df.A.str.replace('([A-Z])+', '')+'_0'

问题点:

  1. 直接保留所有数字部分,未处理字母后的前导零,导致ABCD0011无法得到预期结果
  2. 正则([A-Z])+存在匹配漏洞,会误处理数字中的零(如ABCD1404被错误转换为ABCD_144_0)

修正方案

方案一:拆分处理(可读性高)

通过正则拆分字母和数字部分,单独处理数字前导零后拼接:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('Book1.csv')

# 拆分字母前缀与数字后缀
df[['prefix', 'num']] = df['A'].str.extract(r'^([A-Z]+)(\d+)$', expand=True)

# 去除数字部分的前导零,若结果为空则设为'0'(兼容全零场景)
df['processed_num'] = df['num'].str.lstrip('0').replace('', '0')

# 拼接成目标格式
df['A'] = df['prefix'] + '_' + df['processed_num'] + '_0'

# 清理中间临时列(可选)
df = df.drop(['prefix', 'num', 'processed_num'], axis=1)

方案二:正则直接替换(简洁高效)

用正则捕获组一次性完成匹配与替换:

import pandas as pd

df = pd.read_csv('Book1.csv')
# 匹配字母前缀、前导零、剩余数字,替换为目标格式
df['A'] = df['A'].str.replace(
    r'^([A-Z]+)0*(\d*)$',
    lambda m: f"{m.group(1)}_{m.group(2) if m.group(2) else '0'}_0"
)

两种方案均可得到符合预期的输出,方案二更简洁,方案一可读性更强,适合复杂场景扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:45:46