我想用1
代替汽油,而用0
代替柴油,但不能做到这一点,并且出现以下错误:
AttributeError:
str
对象没有属性map
代码:
carprice['fueltype']=carprice['fueltype'].apply(lambda x: x.map({'gas':1,'diesel':0}))
答案 0 :(得分:1)
在“ apply”中使用map函数可以正常工作。 要将列从系列转换为数据框,请在'[]'
中将其括起来carprice[['fueltype']]=carprice[['fueltype']].apply(lambda x: x.map({'gas':1,'diesel':0}))
答案 1 :(得分:1)
Series.map(arg, na_action=None)[source]
Map values of Series according to input correspondence.
用于将系列中的每个值替换为另一个值,该值可能来自函数、字典或系列。
但是当您应用 lambda 函数并尝试映射列的值时,它会将其作为字符串而不是系列。
因此,要将其视为系列,您必须将列括在方括号中,如下所示:
carprice['fueltype'] = carprice['fueltype'] \
.apply(lambda x: x.map({'gas':1,'diesel':0}))
或者你可以在没有 lambda 函数的情况下使用它:
varlist = ['fueltype']
def binary_map(x):
return x.map({'gas':1,'diesel':0})
carprice[varlist] = carprice[varlist].apply(binary_map)
这两种方法都非常有效。
唯一需要注意的是,我们应该传递一个系列来映射函数。
答案 2 :(得分:0)
尝试:-
carprice['fueltype']=carprice['fueltype'].map({'gas':1,'diesel':0})
或者您可以
carprice['fueltype']=carprice['fueltype'].apply(lambda x: 1 if x =='gas' else 0))
地图基本上在系列上运行,而在每个单元格上应用作品。
答案 3 :(得分:0)
你可以做到
df['Response'] = df['Response'].apply(lambda x: 1 if x =='Yes' or x == 'yes' else( 0 if x =='No' or x == 'No' else 0.5))
或
df['Response'] = df['Response'].map({'Yes' : 1,'No' : 0,'Maybe' : 0.5,'yes' : 1,'no' : 0,'maybe' : 0.5})