我想用1代替气体,用0代替柴油,但做不到这一点,而且出错了:
AttributeError:
str对象没有属性map
代码:
carprice['fueltype']=carprice['fueltype'].apply(lambda x: x.map({'gas':1,'diesel':0}))发布于 2019-07-14 16:53:29
试试这个:-
carprice['fueltype']=carprice['fueltype'].map({'gas':1,'diesel':0})或者你可以
carprice['fueltype']=carprice['fueltype'].apply(lambda x: 1 if x =='gas' else 0))Map基本上对系列操作,而应用在每个单元格上工作。
发布于 2020-07-19 19:02:55
如果您的列是dataframe类型而不是系列,那么带in "apply“的Map函数工作得很好。将列从序列转换为数据格式,用in‘[]将其括起来
carprice[['fueltype']]=carprice[['fueltype']].apply(lambda x: x.map({'gas':1,'diesel':0}))发布于 2020-12-31 08:05:28
Series.map(arg, na_action=None)[source]
Map values of Series according to input correspondence.用于将级数中的每个值替换为另一个值,该值可以从函数、dict或Series派生出来。
但是,当您应用lambda函数并试图映射列的值时,它将其视为字符串而不是Series。
因此,为了将其视为系列,您必须将该列括在方括号中,如下所示:
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)这两种方法都非常有效。
唯一要注意的是,我们应该传递一个系列来映射函数.
https://stackoverflow.com/questions/57029344
复制相似问题