Python 3.x中Iris数据集目标值映射返回map对象问题求助
解决Iris数据集target映射为名称时返回map对象的问题
你遇到的这个问题很常见——在Python 3里,map()函数返回的是一个迭代器对象,而不是直接生成我们需要的字符串列表,所以直接赋值给DataFrame列的话,就会显示类似map object at 0x000000001466DD68的内存地址结果。下面给你几种简单的解决办法:
方法1:将map对象转为列表
直接用list()把迭代器转换成列表,这样DataFrame就能正确存储映射后的名称了:
def mapTarget(target): if target == 0: return 'setosa' if target == 1: return 'versicolor' if target == 2 : return 'virginica' # 这里注意你之前拼写错了,是virginica不是virgincia哦 ir = load_iris() df = pd.DataFrame(ir['data'], columns = ir['feature_names']) df['target'] = ir['target'] df['target_name'] = list(map(mapTarget, df['target'])) # 用list()包裹map结果 print(df)
方法2:使用Pandas的apply()方法
更贴合Pandas数据处理习惯的方式,直接对target列调用apply(),逐行执行你的映射函数:
df['target_name'] = df['target'].apply(mapTarget)
方法3:利用数据集自带的目标名称(最简便)
其实Scikit-learn的Iris数据集本身已经内置了target_names数组,完全不用自己写映射函数,直接用这个更高效还不容易出错:
# 方式一:用字典映射 df['target_name'] = df['target'].map(dict(enumerate(ir['target_names']))) # 方式二:直接索引数组 df['target_name'] = ir['target_names'][df['target']]
另外提醒下你代码里的小拼写错误:virgincia应该是virginica,这个错误会导致target=2时返回错误的名称,记得修正哦~
内容的提问来源于stack exchange,提问作者user7032676
相关产品推荐
相关产品推荐

