pandas 如何在Iris数据集中将数字“物种”转换为类别

wbgh16ku  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(105)

我正在使用来自sklearn的Iris数据集。以下是到目前为止的代码:

iris = datasets.load_iris()

data = pd.DataFrame(iris['data'])
target = pd.DataFrame(iris['target'])

frames = [data,target]
iris = pd.concat(frames,axis=1)

iris.columns = ['sepal_length','sepal_width','petal_length','petal_width','species']

def convert_target(data):
    if data == 0:
        return 'setosa'
    elif data == 1:
        return 'versicolor'
    else:
        return 'virginica'
iris['species'] = iris['species'].apply(convert_target)

观察我如何使用convert_target函数将物种从数值转换为分类值。我的问题是,有没有更好更有效的方法来做到这一点?

x8goxv8g

x8goxv8g1#

你可以做map

d = {0: 'setosa', 1: 'versicolor', 2: 'virginica'}
iris['species'] = iris['species'].map(d)

你也可以使用numpy索引:

cat_names = np.array(['setosa', 'versicolor', 'virginica'])
iris['species'] = cat_names[iris['species']]
i2loujxw

i2loujxw2#

除了map,你还可以使用replace来使用字典:

iris['species'] = iris['species'].replace({0:'setosa',1:'versicolor',2:'virginica'})
iris.samle(5)

     sepal_length  sepal_width  petal_length  petal_width     species
3             4.6          3.1           1.5          0.2      setosa
73            6.1          2.8           4.7          1.2  versicolor
138           6.0          3.0           4.8          1.8   virginica
6             4.6          3.4           1.4          0.3      setosa
140           6.7          3.1           5.6          2.4   virginica
hec6srdp

hec6srdp3#

最简单的答案是所有这些答案的组合。从目标名称创建一个字典。我使用了两个变量。首先我创建了一个temp1来创建一个列表,然后我使用temp2基于列表中名称的位置创建了一个字典。现在数据框列res[“Y”]被创建的字典替换。这是一个更通用的方法,适用于所有scikit数据集

temp1 = iris_ds.target_names
temp2 = dict(enumerate(temp1))
res["Y"] = res["Y"].replace(temp2)

相关问题