'str'对象没有属性'map'

时间:2019-07-14 16:48:14

标签: python python-3.x pandas

我想用1代替汽油,而用0代替柴油,但不能做到这一点,并且出现以下错误:

  

AttributeError:str对象没有属性map

代码:

carprice['fueltype']=carprice['fueltype'].apply(lambda x: x.map({'gas':1,'diesel':0}))

4 个答案:

答案 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})