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

如何使用Pandas去除DataFrame列中非数字字符、空格及前导0?

处理Pandas DataFrame中Name列的数字提取与前导0去除方案

嘿,这个需求很常见,咱们可以通过Pandas的字符串方法结合正则表达式轻松搞定!下面给你两种实用的实现方式,还考虑了边界情况哦:

方法一:分步处理(清晰易懂)

先移除所有非数字字符,再处理前导0,逻辑一目了然:

import pandas as pd

# 构造你的示例DataFrame
df = pd.DataFrame({'Name': ['John5', 'Tom 08', 'Ron 722']})

# 第一步:过滤掉所有非数字字符(包括空格)
df['Name_cleaned'] = df['Name'].str.replace(r'\D', '', regex=True)

# 第二步:移除前导0,同时处理全0的边界情况(避免得到空字符串)
df['Name_cleaned'] = df['Name_cleaned'].apply(lambda x: x.lstrip('0') if x.lstrip('0') else '0')

# 查看处理结果
print(df['Name_cleaned'])

代码解释:

  • str.replace(r'\D', '', regex=True):正则表达式里的\D匹配任何非数字字符(字母、空格、符号全算),把它们全部替换为空,只保留纯数字字符串。
  • lambda x: x.lstrip('0') if x.lstrip('0') else '0':lstrip('0')会去掉字符串开头的所有0,但如果原字符串是'0000',去掉前导0后会变成空字符串,所以这里加了判断,确保这种情况返回'0'而不是空。

运行后你会得到想要的结果:

0      5
1      8
2    722
Name: Name_cleaned, dtype: object

方法二:一行代码简洁实现

如果追求代码简洁,可以把两步合并成一行:

df['Name_cleaned'] = df['Name'].str.replace(r'\D', '', regex=True).apply(lambda x: x.lstrip('0') if x.lstrip('0') else '0')

这个和方法一逻辑完全一致,只是把操作链式调用了,适合喜欢简洁代码的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:50