Pandas 如何转换数值';物种';Iris数据集中的分类

Pandas 如何转换数值';物种';Iris数据集中的分类,pandas,dataframe,scikit-learn,iris-dataset,Pandas,Dataframe,Scikit Learn,Iris Dataset,我正在使用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'

我正在使用
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\u target
函数将物种从数值转换为分类值。我的问题是,有没有更好更有效的方法来做到这一点?

你可以做
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']]

您可以使用字典使用
replace
,而不是
map

iris['species']=iris['species']。替换({0:'setosa',1:'versicolor',2:'virginica'})
艾里斯·萨梅尔(5)
萼片长萼片宽花瓣长花瓣宽种
3.4.6 3.1 1.5 0.2刚毛
73 6.1 2.8 4.7 1.2彩色
138 6.0 3.0 4.8 1.8弗吉尼亚州
6.4.6 3.4 1.4 0.3刚毛
140 6.7 3.1 5.6 2.4弗吉尼亚州

您能解释一下
map
replace
之间的区别吗?这两个键在效率方面是否有任何差异?
map
通常更快,但将不存在的键(例如本例中的
3,4
)转换为
NaN
,而
replace
保持不变。