如何在Pandas列中检测含非数字特殊字符的数值?
问题解决思路
你的问题出在使用了re.sub——这个函数是用来替换字符串中的匹配字符,而不是筛选出包含目标字符的行,所以达不到识别特殊字符行的目的。
下面给两种实用的解决方案:
方法1:匹配所有非数字字符(通用方案)
如果只要找出包含非数字的行,直接用Pandas的str.contains结合正则元字符\D(匹配任何非数字字符):
import pandas as pd import numpy as np data = { 'artificial_number':['000100000','000010000','00001000/1','00001000?','0?00/10000'], } df1 = pd.DataFrame(data) # 筛选包含非数字字符的行 special_rows = df1[df1['artificial_number'].str.contains(r'\D')] print(special_rows)
运行后会输出所有含?、/等非数字的行。
方法2:匹配指定特殊字符(精准方案)
如果只想检测特定的特殊字符(比如你提到的?和/),可以直接在正则里指定这些字符:
# 只筛选包含?或/的行 target_rows = df1[df1['artificial_number'].str.contains(r'[?/]')] print(target_rows)
这种方式更精准,不会误判其他可能的非数字字符(比如字母)。
为什么原来的代码没用?
re.sub(r'[^a-zA-Z0-9\._-]', '', df1['artificial_number']) 会把每个字符串中不符合a-z、A-Z、0-9、.、_、-的字符删掉,返回的是处理后的字符串列表,而不是筛选后的行数据,自然没法帮你识别目标行。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

