2

我正在使用 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)

在此处输入图像描述

4

1 回答 1

3

尝试:

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]

如何speciestarget和列创建target_names列?

>>> 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])

您只需要一个 dict 映射将 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
于 2021-11-03T08:58:08.103 回答