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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:31:18