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

Pandas中如何仅对列内纯数值字符串移除前导零

可行实现方法

首先构造示例测试数据:

import pandas as pd

# 构建和问题中一致的示例DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3],
    'col2': ['ABC8392akl', '001523', '000ABC58']
})

以下三种方法都可以实现需求,可根据编码习惯选择:

  • 方法1:正则判断+字符串裁剪
    先通过正则判断字符串是否为纯数字,仅对纯数字内容移除前导零,额外兼容了全零字符串(比如0000)裁剪后为空的边界问题:
    df['col2'] = df['col2'].where(
        ~df['col2'].str.fullmatch(r'\d+'),
        df['col2'].str.lstrip('0').replace('', '0')
    )
    
  • 方法2:利用pandas数值转换容错机制
    不需要手写正则,靠pd.to_numeric判断内容是否能转为数值,可转的即为纯数字字符串,转成整数时会自动丢弃前导零,不可转的保留原始内容:
    def strip_leading_zero(s):
        num_val = pd.to_numeric(s, errors='coerce')
        return str(int(num_val)) if pd.notna(num_val) else s
    
    df['col2'] = df['col2'].apply(strip_leading_zero)
    
  • 方法3:正则直接替换
    用正向预查正则,仅匹配纯数字字符串开头的所有前导零,替换为空即可,自动兼容全零字符串场景:
    df['col2'] = df['col2'].str.replace(r'^0+(?=\d+$)', '', regex=True)
    

任意一种方法执行后,输出结果都和预期一致:

col1col2
1ABC8392akl
21523
3000ABC58

提示:如果目标列存在空值,建议先做空值过滤或填充,避免运行时报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:06:51