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

如何为Pandas字符串列中的单个数字补前导零?求高效方案

高效为Pandas DataFrame中单个数字添加前导零的方案

针对百万行级别的Pandas DataFrame,想要仅对字符串中的单个数字补前导零(多位数保持不变),最简洁高效的方案是利用Pandas的向量化正则替换,避免多次apply带来的性能损耗。

核心实现代码

import pandas as pd

# 示例数据
df = pd.DataFrame({"col": ["ea11", "ea1", "ea3io10d"]})

# 正则替换:仅匹配孤立的单个数字,补前导零
df["col"] = df["col"].str.replace(r'(?<!\d)(\d)(?!\d)', r'0\1', regex=True)

print(df["col"].tolist())
# 输出: ['ea11', 'ea01', 'ea03io10d']

正则逻辑说明

  • (?<!\d):负向零宽断言,确保目标数字前面不是数字
  • (\d):捕获单个数字作为分组
  • (?!\d):负向零宽断言,确保目标数字后面不是数字
  • 替换为0\1:给捕获的单个数字加前导零

性能优势对比

你之前的方案通过str.split+多次apply处理,本质是逐行遍历并执行列表操作,对于百万行数据会产生大量Python层面的函数调用,性能开销大。而str.replace是Pandas的向量化操作,底层基于C实现,处理百万行数据通常只需几秒(具体耗时取决于字符串长度),代码也更简洁。

边界场景验证

该方案能正确处理各种孤立单个数字的场景:

  • 字符串开头:"1abc" → "01abc"
  • 字符串结尾:"abc1" → "abc01"
  • 非数字字符包围:"a1b" → "a01b"
  • 多位数完全不受影响:"123" → "123"

内容的提问来源于stack exchange,提问作者Declan Mc Gann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:11