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

isdigit()单独可用但结合np.where处理DataFrame时失效求助

问题出在迭代对象搞错啦!

你写的any(char.isdigit() for char in df['Info'])根本不是在检查每个字符串里的字符,而是把整个Series的元素(也就是每个完整的字符串)当成了char来判断!比如它会判断'Tap'这个字符串是不是数字(显然不是)、'15k'是不是数字(也不是),最后整个any()返回的是False,所以np.where直接给所有行都填了'-'。

正确的做法有两种:

1. 用apply逐元素检查字符

通过apply遍历每个字符串里的字符,生成对应布尔数组:

import numpy as np
import pandas as pd

df = pd.DataFrame({'Info': ['Tap', '15k', 'rot', '12psi']})
# 生成每个元素是否含数字的布尔序列
has_digit = df['Info'].apply(lambda s: any(c.isdigit() for c in s))
df['num'] = np.where(has_digit, df['Info'], '-')

2. 用正则表达式更高效

Pandas的str.contains可以直接用正则\d匹配数字,代码更简洁,大数据下性能也更好:

df['num'] = np.where(df['Info'].str.contains(r'\d'), df['Info'], '-')

两种方法运行后,你的DataFrame都会得到正确结果:

Info   num
0    Tap     -
1    15k   15k
2    rot     -
3  12psi  12psi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:47