如何使用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
相关产品推荐
相关产品推荐

