虹膜数据集未显示“物种”列

Posted

技术标签:

【中文标题】虹膜数据集未显示“物种”列【英文标题】:Iris dataset not showing "Species" column 【发布时间】:2021-12-17 15:44:39 【问题描述】:

我正在使用 Python 上的 numpy 和 pandas 来学习如何处理数据帧。

我在 Collaboratory 上进行编码,我已经加载了 Iris 数据集,但由于某种原因,我的数据框中没有“物种”列。也许我以不正确的方式加载它?非常感谢您对此事的帮助。

我添加了一张图片,如果仍然需要代码,那么这就是我所拥有的:

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

df = pd.DataFrame(load_iris().data, columns=load_iris().feature_names)

【问题讨论】:

在此处查看有关数据集的更多信息:scikit-learn.org/stable/datasets/toy_dataset.html#iris-dataset。似乎物种是数据集中的 y 列,可以通过以下方式调用:load_iris().target 【参考方案1】:

试试:

import numpy as np
import pandas as pd 
from sklearn.datasets import load_iris

iris = load_iris()

df = pd.DataFrame(data=np.c_[iris['data'], iris['target']],
                  columns= iris['feature_names'] + ['target']).astype('target': int) \
       .assign(species=lambda x: x['target'].map(dict(enumerate(iris['target_names']))))

输出:

>>> df
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target    species
0                  5.1               3.5                1.4               0.2       0     setosa
1                  4.9               3.0                1.4               0.2       0     setosa
2                  4.7               3.2                1.3               0.2       0     setosa
3                  4.6               3.1                1.5               0.2       0     setosa
4                  5.0               3.6                1.4               0.2       0     setosa
..                 ...               ...                ...               ...     ...        ...
145                6.7               3.0                5.2               2.3       2  virginica
146                6.3               2.5                5.0               1.9       2  virginica
147                6.5               3.0                5.2               2.0       2  virginica
148                6.2               3.4                5.4               2.3       2  virginica
149                5.9               3.0                5.1               1.8       2  virginica

[150 rows x 6 columns]

如何从targettarget_names 列创建species 列?

>>> iris['target_names']
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
# index 0: setosa
# index 1: versicolor
# index 2: virginica

>>> iris['target']
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

您只需要一个字典映射,将 0 替换为“setosa”,将 1 替换为“versicolor”,将 2 替换为“virginica”。使用 enumerate 创建元组列表 [(0, 'setosa'), (1, 'versicolor), (2, 'virginica')] then dict` 以转换为字典:

>>> dict(enumerate(iris['target_names']))
0: 'setosa', 1: 'versicolor', 2: 'virginica'

现在Series.map会映射对应的值:

>>> df['target'].map(dict(enumerate(iris['target_names'])))
0         setosa
1         setosa
2         setosa
3         setosa
4         setosa
         ...    
145    virginica
146    virginica
147    virginica
148    virginica
149    virginica
Name: target, Length: 150, dtype: object

【讨论】:

太棒了!你能解释一下你添加的参数吗?如果这太麻烦了,那么我会尝试找出自己。非常感谢! @Chefi。我更新了我的答案。现在清楚了吗? 绝对!再次感谢您,并对迟到的回复感到抱歉。 (我不经常访问***)

以上是关于虹膜数据集未显示“物种”列的主要内容,如果未能解决你的问题,请参考以下文章

在函数内修改数据集但数据集未更改

字段集未正确显示

Perfmon 数据收集器集未将数据放入 SQL

插入锁定表时记录集未显示错误

django 查询集未显示准确结果(构建新闻应用程序)

虹膜数据集是不是被视为图像的提取特征数据集? [关闭]