虹膜数据集未显示“物种”列
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]
如何从target
和target_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。我更新了我的答案。现在清楚了吗? 绝对!再次感谢您,并对迟到的回复感到抱歉。 (我不经常访问***)以上是关于虹膜数据集未显示“物种”列的主要内容,如果未能解决你的问题,请参考以下文章