从Pandas形式的虹膜数据集转到sk-learn形式的有效方法?

时间:2018-10-01 18:11:57

标签: python pandas scikit-learn

如何将虹膜数据集的熊猫版本转换为sk-learn使用的格式?

#Seaborn dataset
import seaborn as sns
iris_seaborn = sns.load_dataset("iris")


sepal_length    sepal_width petal_length    petal_width species
0   5.1 3.5 1.4 0.2 setosa
1   4.9 3.0 1.4 0.2 setosa
2   4.7 3.2 1.3 0.2 setosa
3   4.6 3.1 1.5 0.2 setosa
4   5.0 3.6 1.4 0.2 setosa

Sci-kit学习:

#sk-learn dataset
from sklearn.datasets import load_iris
iris_sklearn = load_iris()

[Out] array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2]])


iris_sklearn.target[0:5]

[Out] array([0, 0, 0, 0, 0])

我知道这些步骤正在分别使用sklearn.preprocessing.MinMaxScalersklearn.preprocessing.LabelEncoder分别用于数字和分类数据来规范化列。但是,除了对每一列进行处理然后与zip()放在一起之外,我不知道有什么更有效的方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以factorize标签,然后将基础numpy数组用于其余数据:

target = pd.factorize(iris_seaborn.species)[0]
# alternatively:
# target = pd.Categorical(iris_seaborn.species).codes
# or 
# target = iris_seaborn.species.factorize()[0]

data = iris_seaborn.iloc[:,:-1].values

# look at start of data:
>>> data[:5,:]
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2]])

# and of target:
>>> target[:5]
array([0, 0, 0, 0, 0])