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

Python如何实现类似SQL Server的ISNUMERIC功能修正pandas错位数据

原有代码错误原因
  • 误用Python内置关键字type作为列引用,没有正确指定prod表的type列,需写为prod['type']
  • np.isnumeric()不支持直接作用于pandas Series对象,需使用pandas自带的字符串方法.str.isnumeric()做整列数值判断
  • 存在语法错误:代码括号未配对闭合,运行时会直接触发语法报错
正确实现方式

核心判断逻辑:错位行的特征为type列填充了本应属于quantity列的数值,只要type列值为数值即判定为错位,交换两列值即可。

基础版本(仅判断正整数场景)

如果你的quantity列存储的都是正整数,可直接使用.str.isnumeric()实现:

import pandas as pd
import numpy as np

# 生成错位判断标记,fillna(False)用于规避空值返回NaN导致判断异常
is_misplaced = prod['type'].str.isnumeric().fillna(False)

# 同时给两列赋值完成交换,无需额外备份原始值
prod['quantity'], prod['type'] = np.where(
    is_misplaced,
    (prod['type'], prod['quantity']),
    (prod['quantity'], prod['type'])
).T

通用版本(兼容带小数点、负号的数值场景)

.str.isnumeric()仅能识别正整数,如果你需要和SQL Server的ISNUMERIC()效果一致,支持判断带小数点、负号的数值,可使用自定义判断函数:

def is_numeric(val):
    try:
        float(val)
        return True
    except (ValueError, TypeError):
        return False

# 生成错位判断标记
is_misplaced = prod['type'].apply(is_numeric)

# 赋值修正
prod['quantity'], prod['type'] = np.where(
    is_misplaced,
    (prod['type'], prod['quantity']),
    (prod['quantity'], prod['type'])
).T

易读版本(分开赋值逻辑)

如果觉得上面的同时赋值写法不好理解,可分开赋值,注意要先备份原始列值避免覆盖:

# 备份原始值
original_quantity = prod['quantity'].copy()
original_type = prod['type'].copy()

# 生成判断标记
is_misplaced = prod['type'].apply(is_numeric)

# 分别修正两列
prod['quantity'] = np.where(is_misplaced, original_type, original_quantity)
prod['type'] = np.where(is_misplaced, original_quantity, original_type)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:39:02