小白求助:python报错怎么解决 ?

python 报错:AttributeError: ("'list' object has no attribute 'map'", 'occurred at index 0')

def function(x, y, z):
    if x <= 100 and y == 'AB':
        return (list(z).map(concept_hierarchy(0))) * disc
    elif x <= 200 and y == 'AC':
        return (list(z).map(concept_hierarchy(1))) * disc
    else:
        return None
data['abc'] = data.apply(lambda x: function(x['a'], x['b'], x['c']), axis=1)

代码主要是对数据表里面,C列的值(特征较多,字符型)进行关系映射(转为数值)。

(list(z).map(concept_hierarchy(0))) * disc 这种写法,就是说在调用list的map成员函数,但list是python的内置类型,它没有map成员函数。
你本来的意思是想用map高阶函数,用法其实很简单,给你推荐一个链接,一下你就明白了。
https://www.liaoxuefeng.com/wiki/1016959663602400/1017329367486080

不知道你的

concept_hierarchy(0)

是不是一个函数,并且也没看出在哪里调用了z,如果是的话,你应该把它改成

list(map(lambda zi:concept_hierarchy(zi)*disc,z))

按照我的理解写的,可能和你想表达的意思不一致,你参考一下map的用法,python3返回迭代器,所以又套了一层list在外面。

A. map()是python内置的高阶函数,对于pyhon3,返回的是迭代对象,对于python2 ,返回的是列表

B. 其参数为 map(function,list) ,function为可接收参数的函数名,list为待处理的列表对象,所以 你这里 list(z).map(concept_hierarchy(0))的调用方式是错误的,正确的调用方式应该是map(concept_hierarchy,list(z))

C. 你的调用方式,可以理解为list.map(function),这种调用方式是错误的,且list对象,无map属性或方法,所以提示的报错是,'list' object has no attribute 'map'",另外 concept_hierarchy(0),我理解的是 concept_hierarchy是个你自定义的函数,但是这里不应该写入参数,map函数会自动迭代list参数(z?)的每个元素作为函数(concept_hierarchy)的参数,如果concept_hierarchy(0) 返回的是个固定值,则concept_hierarchy(0) 是不能作为map的function 参数的,因为function要求一定是个可接受参数的函数

map函数用的不对,应该是map(function,iterables)