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

如何用numpy.where检查DataFrame字符串数值的小数位数与范围并标记问题

用numpy.where标记字符串格式数值的异常项

核心思路

要实现需求,需分两步处理两个判断条件,再通过numpy.where组合条件生成标记列:

  1. 分析字符串格式数值的小数位数
  2. 转换数值后判断是否在指定范围内
  3. 用逻辑与组合两个条件,满足时标记issues,否则留空

代码实现

首先构造示例DataFrame:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({
    'value_str': ['12.34', '56', '-99.9', '201.00', '-101.12', '150.78']
})

步骤1:计算小数位数

通过字符串方法判断是否含小数点,再提取小数部分长度:

# 判断是否包含小数点
has_decimal = df['value_str'].str.contains('\.', regex=True)
# 计算小数位数:有小数点取小数部分长度,无则为0
decimal_places = np.where(
    has_decimal,
    df['value_str'].str.split('.').str[1].str.len(),
    0
)

步骤2:转换数值并判断范围

将字符串转为数值型,方便范围校验:

# 转换为数值(默认所有字符串都是合法数值,若有异常可加errors='coerce')
num_values = pd.to_numeric(df['value_str'])
# 判断是否在[-100, 200]范围外
out_of_range = (num_values < -100) | (num_values > 200)

步骤3:生成标记列

组合两个条件,用numpy.where生成结果:

# 组合条件:小数位数≠2 且 数值超出范围
condition = (decimal_places != 2) & out_of_range
# 添加新列
df['check_result'] = np.where(condition, 'issues', '')

运行结果

执行后DataFrame内容:

value_str check_result
0    12.34              
1       56              
2     -99.9              
3    201.00       issues
4   -101.12       issues
5    150.78              

补充说明

  • 所有操作均使用矢量化方法,未用到apply,效率更高
  • 若存在无法转换为数值的字符串,可在pd.to_numeric中添加errors='coerce',并额外处理NaN的情况(比如将其也标记为issues)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:34:54