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

使用str.contains通过正则检查DataFrame列数值时报错的解决方法

DataFrame检查指定列是否全为数值的实现方法

报错原因

你遇到的报错是因为Roll.No列本身是数值类型,Pandas的.str访问器仅支持字符串类型的Series调用,直接对数值列使用就会抛出AttributeError: Can only use .str accessor with string values!。

常见需求实现方式

需求1:检查整列所有值(不含NaN)均为合法数值

用pd.to_numeric实现兼容性最强,支持整数、浮点数、字符串格式数值的统一判断:

# errors='coerce' 会把无法转为数值的内容统一替换为NaN
# 整体无NaN即说明全为合法数值
is_all_numeric = pd.to_numeric(df['Roll.No'], errors='coerce').notna().all()

输出为True说明列全为数值,False说明存在非数值内容。

需求2:允许列中存在NaN,仅判断非空值均为数值

# 对比转换前后的NaN分布一致,说明非空内容都可以转为数值
non_na_all_numeric = pd.to_numeric(df['Roll.No'], errors='coerce').isna().equals(df['Roll.No'].isna())

需求3:筛选出列中存在非数值的行

对应你原代码想要实现的过滤逻辑,写法如下:

# 筛选出Roll.No列为非数值的行
non_numeric_df = df[pd.to_numeric(df['Roll.No'], errors='coerce').isna()]

正则匹配实现方案

如果一定要用正则匹配做判断,需要先把目标列转为字符串类型,即可正常调用.str方法:

# 先转字符串再正则匹配非数字字符
has_non_numeric = df['Roll.No'].astype(str).str.contains(r'[^0-9]', na=True).any()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:02