You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:58:33