不能按范围替换

Cannot replace by range

下面的代码工作正常,但如果我想在 (30001-35000) 之间替换它的显示错误,它会替换特定范围:

df['Msrp'] = np.where(df['Msrp'].between (25001,30000), 'F', df['Msrp'])
print(df)
df['Msrp'] = np.where(df['Msrp'].between (30001,35000), 'G', df['Msrp'])
print(df)


                    Vin        MakeDescr            SeriesDescr   Msrp
0     2HNYD2H23BH516418            ACURA                    MDX  42580
1     JH4CU2F67AC034248            ACURA                    TSX      F
2     WAUBFAFL3AN022431             AUDI                     A4  32350
3     WBAVC93507K030197              BMW               3 Series  34300
4     1D3HV18P49S803785      DODGE TRUCK     Ram 1500 Pickup-V8  32695
5     2C4RC1BG0CR187071         CHRYSLER      Town & Country-V6      F

TypeError: '>=' not supported between instances of 'str' and 'int'

我认为需要 numpy.select 来替换为多个布尔掩码:

m1 = df['Msrp'].between (25001,30000)
m2 = df['Msrp'].between (30001,35000)

df['Msrp'] = np.select([m1, m2], ['F', 'G'], default='not match')

您的代码的问题是在第一个 np.where 获得 Msrp 列中的混合值之后 - 带有 F 的数字,因此第二个 np.where 引发错误。