首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'str’对象没有属性'map‘

‘'str’对象没有属性'map‘
EN

Stack Overflow用户
提问于 2019-07-14 16:48:14
回答 4查看 11.6K关注 0票数 2

我想用1代替气体,用0代替柴油,但做不到这一点,而且出错了:

AttributeError:str对象没有属性map

代码:

代码语言:javascript
复制
carprice['fueltype']=carprice['fueltype'].apply(lambda x: x.map({'gas':1,'diesel':0}))
EN

回答 4

Stack Overflow用户

发布于 2019-07-14 16:53:29

试试这个:-

代码语言:javascript
复制
carprice['fueltype']=carprice['fueltype'].map({'gas':1,'diesel':0})

或者你可以

代码语言:javascript
复制
carprice['fueltype']=carprice['fueltype'].apply(lambda x: 1 if x =='gas' else 0))

Map基本上对系列操作,而应用在每个单元格上工作。

票数 3
EN

Stack Overflow用户

发布于 2020-07-19 19:02:55

如果您的列是dataframe类型而不是系列,那么带in "apply“的Map函数工作得很好。将列从序列转换为数据格式,用in‘[]将其括起来

代码语言:javascript
复制
carprice[['fueltype']]=carprice[['fueltype']].apply(lambda x: x.map({'gas':1,'diesel':0}))
票数 2
EN

Stack Overflow用户

发布于 2020-12-31 08:05:28

代码语言:javascript
复制
Series.map(arg, na_action=None)[source]
Map values of Series according to input correspondence.

用于将级数中的每个值替换为另一个值,该值可以从函数、dict或Series派生出来。

但是,当您应用lambda函数并试图映射列的值时,它将其视为字符串而不是Series。

因此,为了将其视为系列,您必须将该列括在方括号中,如下所示:

代码语言:javascript
复制
carprice['fueltype'] = carprice['fueltype'] \
                       .apply(lambda x: x.map({'gas':1,'diesel':0}))

或者您可以在没有lambda函数的情况下使用它,如下所示:

代码语言:javascript
复制
varlist =  ['fueltype']
    def binary_map(x):
        return x.map({'gas':1,'diesel':0})
carprice[varlist] = carprice[varlist].apply(binary_map)

这两种方法都非常有效。

唯一要注意的是,我们应该传递一个系列来映射函数.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57029344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档