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)
任意一种方法执行后,输出结果都和预期一致:
| col1 | col2 |
|---|---|
| 1 | ABC8392akl |
| 2 | 1523 |
| 3 | 000ABC58 |
提示:如果目标列存在空值,建议先做空值过滤或填充,避免运行时报错。
内容的提问来源于stack exchange,提问作者question12
相关产品推荐
相关产品推荐

