不能按范围替换
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
引发错误。
下面的代码工作正常,但如果我想在 (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
引发错误。