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

Python Pandas替换指定数值区间单元格值及解决类型匹配报错

Pandas替换数值区间值为指定字符串的解决方案

问题根源

报错'>=' not supported between instances of 'str' and 'int'是因为你的Race 1列是字符串类型,无法直接和整数200/300做比较运算。另外你写的逻辑条件误用了|(或),这会匹配所有数据(任何值要么>=200要么<=300),正确的区间判断应该用&(且)。

解决方案

方法1:转换列类型为数值(推荐)

先把Race 1列转换成整数类型,再进行区间判断:

# 转换列类型,处理可能的非数字值(若列内全为数字字符串可省略errors参数)
df['Race 1'] = pd.to_numeric(df['Race 1'], errors='coerce')

# 替换200-300区间的值为'Asian'
df.loc[(df['Race 1'] >= 200) & (df['Race 1'] <= 300), 'Race 1'] = 'Asian'

方法2:直接用字符串比较(仅限固定长度数字字符串)

若Race 1列的数字均为三位字符串(如"200"、"250"),可直接用字符串字典序比较:

df.loc[(df['Race 1'] >= "200") & (df['Race 1'] <= "300"), 'Race 1'] = 'Asian'

注意:此方法局限性大,若存在非三位数字字符串(如"99"、"1000")会导致判断逻辑错误,优先选方法1。

方法3:用numpy.where模拟SQL Case逻辑

如果你习惯SQL的Case写法,可通过numpy.where实现等效逻辑:

import numpy as np

# 先转换列类型
df['Race 1'] = pd.to_numeric(df['Race 1'], errors='coerce')
df['Race 1'] = np.where((df['Race 1'] >= 200) & (df['Race 1'] <= 300), 'Asian', df['Race 1'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:25:09