在下面的代码中,我假设 iris 是专门为sklearn /数据集设计的一堆对象。
# import load_iris function from datasets module
from sklearn.datasets import load_iris
# save "bunch" object containing iris dataset and its attributes
iris = load_iris()
当我试图了解它是什么类型的对象时,它会说成束对象。
type(iris)
Out[4]:
sklearn.utils.Bunch
现在,如果我需要使用corr()方法计算每对属性之间的标准相关性,则需要在数据框上工作,而不是束对象上。
我该怎么做?我可以在iris.data上执行它吗?我知道这是一个数组。不是数据框。
# check the types of the features
print(type(iris.data))
Out[5]:
<class 'numpy.ndarray'>
现在,如果我使用海运的内置数据集或实际数据源的数据集,则不会出现此问题。在这里iris.corr()正常工作。是的,这里的 iris 是数据框。
iris = sns.load_dataset("iris")
type(iris)
Out[7]:
pandas.core.frame.DataFrame
iris.corr()
Out[8]:
sepal_length sepal_width petal_length petal_width
sepal_length 1.000000 -0.117570 0.871754 0.817941
sepal_width -0.117570 1.000000 -0.428440 -0.366126
petal_length 0.871754 -0.428440 1.000000 0.962865
petal_width 0.817941 -0.366126 0.962865 1.000000
如何在上一个示例中运行corr()?使用sklearn束对象?如何将sklearn束对象转换为数据框?还是将iris.data ndarray转换为dataframe?
答案 0 :(得分:0)
查看How to convert a Scikit-learn dataset to a Pandas dataset?的回复后,可能是答案。感谢大家的指导。
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
data = load_iris()
我们可以使用np.column_stack组合特征和目标变量。
df = pd.DataFrame(np.column_stack((data.data, data.target)), columns = data.feature_names+['target'])
print(df.head())
输出:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 0.0
1 4.9 3.0 1.4 0.2 0.0
2 4.7 3.2 1.3 0.2 0.0
3 4.6 3.1 1.5 0.2 0.0
4 5.0 3.6 1.4 0.2 0.0
现在,我们可以通过将target_names转换为字典并添加新列来进行替换:
df['label'] = df.target.replace(dict(enumerate(data.target_names)))
print(df.head())
输出:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target label
0 5.1 3.5 1.4 0.2 0.0 setosa
1 4.9 3.0 1.4 0.2 0.0 setosa
2 4.7 3.2 1.3 0.2 0.0 setosa
3 4.6 3.1 1.5 0.2 0.0 setosa
4 5.0 3.6 1.4 0.2 0.0 setosa