prosource

Scikit 학습 데이터 세트를 Panda 데이터 세트로 변환하는 방법

probook 2023. 6. 22. 21:58
반응형

Scikit 학습 데이터 세트를 Panda 데이터 세트로 변환하는 방법

Scikit-learn Bunch 개체의 데이터를 Pandas DataFrame으로 변환하려면 어떻게 해야 합니까?

from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()
print(type(data))
data1 = pd. # Is there a Pandas method to accomplish this?

수동으로 사용할 수 있습니다.pd.DataFrame 배열, numpy 배제공(공제▁num,▁a()을 제공합니다.data 및()columns) 의 DataFrame에을 포함하려면 )를 사용하여 을 하나의 하면 됩니다.np.c_[...]:[]):

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

# save load_iris() sklearn dataset to iris
# if you'd like to check dataset type use: type(load_iris())
# if you'd like to view list of attributes use: dir(load_iris())
iris = load_iris()

# np.c_ is the numpy concatenate function
# which is used to concat iris['data'] and iris['target'] arrays 
# for pandas column argument: concat iris['feature_names'] list
# and string list (in this case one string); you can make this anything you'd like..  
# the original dataset would probably call this ['Species']
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['target'])
from sklearn.datasets import load_iris
import pandas as pd

data = load_iris()
df = pd.DataFrame(data=data.data, columns=data.feature_names)
df.head()

이 튜토리얼은 흥미로울 수 있습니다: http://www.neural.cz/dataset-exploration-boston-house-pricing.html

TomDLt의 솔루션은 scikit-learn의 모든 데이터 세트에 대해 충분히 일반적이지 않습니다.예를 들어, 보스턴 하우징 데이터 세트에서는 작동하지 않습니다.저는 더 보편적인 다른 해결책을 제안합니다.Numpy도 사용할 필요가 없습니다.

from sklearn import datasets
import pandas as pd

boston_data = datasets.load_boston()
df_boston = pd.DataFrame(boston_data.data,columns=boston_data.feature_names)
df_boston['target'] = pd.Series(boston_data.target)
df_boston.head()

일반적인 기능으로서:

def sklearn_to_df(sklearn_dataset):
    df = pd.DataFrame(sklearn_dataset.data, columns=sklearn_dataset.feature_names)
    df['target'] = pd.Series(sklearn_dataset.target)
    return df

df_boston = sklearn_to_df(datasets.load_boston())

이걸 알아내는데 2시간이 걸렸습니다

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
##iris.keys()


df= pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                 columns= iris['feature_names'] + ['target'])

df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)

내 판다를 위해 종을 돌려받으세요.

새 업데이트

" 매 변 사 수 있 다 니 습 할 용 개 를 수 다 니 ▁the ▁parameter ▁you ▁canas_frame=True판다 데이터 프레임을 가져올 수 있습니다.

as_frame 매개 변수를 사용할 수 있는 경우(예: load_iris)

from sklearn import datasets
X,y = datasets.load_iris(return_X_y=True) # numpy arrays

dic_data = datasets.load_iris(as_frame=True)
print(dic_data.keys())

df = dic_data['frame'] # pandas dataframe data + target
df_X = dic_data['data'] # pandas dataframe data only
ser_y = dic_data['target'] # pandas series target only
dic_data['target_names'] # numpy array

as_frame 매개 변수를 사용할 수 없는 경우(예: load_boston)

from sklearn import datasets

fnames = [ i for i in dir(datasets) if 'load_' in i]
print(fnames)

fname = 'load_boston'
loader = getattr(datasets,fname)()
df = pd.DataFrame(loader['data'],columns= loader['feature_names'])
df['target'] = loader['target']
df.head(2)

내가 훨씬 더 쉽게 머리를 감을 수 있는 대안으로:

data = load_iris()
df = pd.DataFrame(data['data'], columns=data['feature_names'])
df['target'] = data['target']
df.head()

기본적으로 처음부터 연결하는 대신 기능 매트릭스로 데이터 프레임을 만든 다음 데이터['whatvername']로 대상 열을 추가하고 데이터 집합에서 대상 값을 가져옵니다.

그렇지 않으면 실제 판다 데이터 프레임인 Seaborn 데이터 세트를 사용합니다.

import seaborn
iris = seaborn.load_dataset("iris")
type(iris)
# <class 'pandas.core.frame.DataFrame'>

스크킷 학습 데이터 세트와 비교:

from sklearn import datasets
iris = datasets.load_iris()
type(iris)
# <class 'sklearn.utils.Bunch'>
dir(iris)
# ['DESCR', 'data', 'feature_names', 'filename', 'target', 'target_names']

이것은 저에게 효과가 있는 쉬운 방법입니다.

boston = load_boston()
boston_frame = pd.DataFrame(data=boston.data, columns=boston.feature_names)
boston_frame["target"] = boston.target

그러나 이것은 load_iris에도 적용될 수 있습니다.

솔루션의 대부분은 열 이름 또는 종별 대상 이름이 없습니다.이 솔루션은 target_name 레이블을 제공합니다.

@Ankit-mathanker 솔루션은 작동하지만 데이터 프레임 시리즈 'target_names'를 반복하여 홍채 종을 정수 식별자로 대체합니다.

다음 솔루션은 '필요 없는 경우 데이터 프레임을 반복하지 마십시오'라는 격언을 기반으로 pd.replace()를 사용하여 보다 간결하게 교체를 수행합니다.

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
df = pd.DataFrame(iris['data'], columns = iris['feature_names'])
df['target'] = pd.Series(iris['target'], name = 'target_values')
df['target_name'] = df['target'].replace([0,1,2],
['iris-' + species for species in iris['target_names'].tolist()])

df.head(3)
소매길이 (cm) 세팔 너비 (cm) 꽃잎 길이 (cm) 꽃잎 너비 (cm) 표적의 target_name
0 5.1 3.5 1.4 0.2 0 홍채 세토사
1 4.9 3.0 1.4 0.2 0 홍채 세토사
2 4.7 3.2 1.3 0.2 0 홍채 세토사

이것은 나에게 효과가 있습니다.

dataFrame = pd.dataFrame(data = np.c_[ [iris['data'],iris['target'] ],
columns=iris['feature_names'].tolist() + ['target'])

은 형과대변결수는다합른같방다다습니음과법은상을 사용하는 것입니다.np.column_stack(계속)

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

data = load_iris()
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그러면 사용할 수 있습니다.replace▁by환.target_namesdictionary 새을 추가합니다.

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

0.23 사용하여 데이터 프레임을 직접 반환할 수 .as_frame들어 세트 :예를 들어 홍채 데이터 세트 로드:

from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
df = iris.data

잠정 릴리스 노트를 사용한 제가 이해하기로는 유방암, 당뇨병, 숫자, 홍채, 라이너루드, 와인 및 캘리포니아_하우스 데이터 세트에 대해 작동합니다.

여기 또 다른 통합 방법 예제가 도움이 될 수 있습니다.

from sklearn.datasets import load_iris
iris_X, iris_y = load_iris(return_X_y=True, as_frame=True)
type(iris_X), type(iris_y)

데이터 isis_X는 panda DataFrame으로 가져오고 대상 isis_y는 panda Series로 가져옵니다.

기본적으로 필요한 것은 "데이터"이며, 스크킷 묶음에 데이터가 있습니다. 이제는 묶음에도 있는 "목표"(예측)만 있으면 됩니다.

따라서 데이터를 완벽하게 만들기 위해 이 두 가지를 결합하기만 하면 됩니다.

  data_df = pd.DataFrame(cancer.data,columns=cancer.feature_names)
  target_df = pd.DataFrame(cancer.target,columns=['target'])

  final_df = data_df.join(target_df)

API는 제안된 응답보다 조금 깨끗합니다. 서기를 사용하여, 용사as_frame응답 열도 포함해야 합니다.

import pandas as pd
from sklearn.datasets import load_wine

features, target = load_wine(as_frame=True).data, load_wine(as_frame=True).target
df = features
df['target'] = target

df.head(2)

최상의 답변을 작성하고 제 의견을 언급하면서, 여기 변환을 위한 기능이 있습니다.

def bunch_to_dataframe(bunch):
  fnames = bunch.feature_names
  features = fnames.tolist() if isinstance(fnames, np.ndarray) else fnames
  features += ['target']
  return pd.DataFrame(data= np.c_[bunch['data'], bunch['target']],
                 columns=features)

이 토막글은 TomDLT와 rolyat이 이미 기여하고 설명한 것을 바탕으로 만들어진 구문 설탕일 뿐입니다.유일한 차이점은load_iris사전 대신 튜플을 반환하고 열 이름이 열거됩니다.

df = pd.DataFrame(np.c_[load_iris(return_X_y=True)])

저는 당신의 답변에서 몇 가지 아이디어를 얻었는데 어떻게 더 짧게 만드는지 모르겠습니다 :)

import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris['feature_names'])
df['target'] = iris['target']

그러면 feature_names + target을 열과 RangeIndex(start=0, stop=len(df), step=1)로 지정한 Pandas 데이터 프레임이 제공됩니다.저는 'target'을 직접 추가할 수 있는 더 짧은 코드를 원합니다.

pd를 사용할 수 있습니다.Numpy 배열(데이터)과 열의 이름 목록(열)을 제공하는 DataFrame 생성자입니다.하나의 DataFrame에 모든 기능을 포함하려면 피쳐와 대상을 np.c_[...](괄호가 아닌 대괄호를 참고)를 사용하여 하나의 numpy 배열로 연결할 수 있습니다.또한 연결하기 전에 기능 이름(iris['feature_names'])을 목록으로 변환하지 않으면 문제가 발생할 수 있습니다.

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= list(iris['feature_names']) + ['target'])

이 질문에 대한 많은 좋은 답변; 아래에 저의 답변을 추가했습니다.

import pandas as pd
from sklearn.datasets import load_iris

df = pd.DataFrame(
    # load all 4 dimensions of the dataframe EXCLUDING species data
    load_iris()['data'],
    # set the column names for the 4 dimensions of data
    columns=load_iris()['feature_names']
)

# we create a new column called 'species' with 150 rows of numerical data 0-2 signifying a species type. 
# Our column `species` should have data such `[0, 0, 1, 2, 1, 0]` etc.
df['species'] = load_iris()['target']
# we map the numerical data to string data for species type
df['species'] = df['species'].map({
    0 : 'setosa',
    1 : 'versicolor',
    2 : 'virginica'   
})

df.head()

sepal-df-head

고장

  • 인지 어떤이그는유로그▁for는유.load_iris['feature_names]의 열 길이,너비, 길이, 너비 4개의 열(팔자 길이, 봉인 너비, 꽃잎 길이)이 있습니다. 더욱이,load_iris['data']다음에 대한 데이터만 포함합니다.feature_names상기의
  • 대신, 종 열 이름은 다음에 저장됩니다.load_iris()['target_names'] == array(['setosa', 'versicolor', 'virginica'].
  • 여기에 종 행 데이터가 저장됩니다.load_iris()['target'].nunique() == 3
  • 우리의 목표는 단순히 다음과 같은 새로운 열을 추가하는 것이었습니다.species그것을 사용한map수치 데이터를 변환하는 기능0-2홍채 종을 나타내는 3가지 유형의 문자열 데이터로.

이것은 쉬운 방법이며 sklearn의 대부분의 데이터셋에서 작동합니다.

import pandas as pd
from sklearn import datasets

# download iris data set
iris = datasets.load_iris()

# load feature columns to DataFrame
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# add a column to df called 'target_c' then asign the target data of iris data
df['target_c'] = iris.target

# view final DataFrame
df.head()

더 간단하고 접근하기 쉬운 방법을 시도했습니다.

import pandas as pd
from sklearn import datasets

iris = load_iris()

X= pd.DataFrame(iris['data'], columns= iris['feature_names'])
y = pd.DataFrame(iris['target'],columns=['target'])
df = X.join(y)

더 나은 방법이 있을 수도 있지만, 여기 제가 과거에 했던 일이 있고 꽤 잘 작동합니다.

items = data.items()                          #Gets all the data from this Bunch - a huge list
mydata = pd.DataFrame(items[1][1])            #Gets the Attributes
mydata[len(mydata.columns)] = items[2][1]     #Adds a column for the Target Variable
mydata.columns = items[-1][1] + [items[2][0]] #Gets the column names and updates the dataframe

이제 내 데이터에는 속성, 대상 변수 및 열 이름 등 필요한 모든 것이 포함됩니다.

TomDLT가 뭐라고 대답했든 간에 여러분 중 일부에게는 효과가 없을 수도 있습니다.

data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                 columns= iris['feature_names'] + ['target'])

isis['feature_names']가 numpy 배열을 반환하기 때문입니다.numpy 배열에서는 + 연산자만으로 배열과 목록 ['target']을 추가할 수 없습니다.따라서 먼저 목록으로 변환한 다음 추가해야 합니다.

할수있습니다

data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                 columns= list(iris['feature_names']) + ['target'])

이것은 잘 작동할 것 같아요.

import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
X = iris['data']
y = iris['target']
iris_df = pd.DataFrame(X, columns = iris['feature_names'])
iris_df.head()

가장 좋은 방법 중 하나:

data = pd.DataFrame(digits.data)

디지츠는 sklearn 데이터 프레임이고 나는 그것을 판다 데이터 프레임으로 변환했습니다.

from sklearn.datasets import load_iris
import pandas as pd

iris_dataset = load_iris()

datasets = pd.DataFrame(iris_dataset['data'], columns = 
           iris_dataset['feature_names'])
target_val = pd.Series(iris_dataset['target'], name = 
            'target_values')

species = []
for val in target_val:
    if val == 0:
        species.append('iris-setosa')
    if val == 1:
        species.append('iris-versicolor')
    if val == 2:
        species.append('iris-virginica')
species = pd.Series(species)

datasets['target'] = target_val
datasets['target_name'] = species
datasets.head()

대답도 많고 소음도 많고...다음은 단순하고 사용법입니다.pd.Categorical대상 변수에 대한 값입니다.

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()

df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df["species"] = pd.Categorical.from_codes(iris.target, iris.target_names)

#      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
# ..            ...          ...           ...          ...        ...
# 145           6.7          3.0           5.2          2.3  virginica
# 146           6.3          2.5           5.0          1.9  virginica
# 147           6.5          3.0           5.2          2.0  virginica
# 148           6.2          3.4           5.4          2.3  virginica
# 149           5.9          3.0           5.1          1.8  virginica
# 
# [150 rows x 5 columns]

대상 변수의 정수 코드를 추출하려면 액세서를 사용합니다.

df.species.cat.codes

# 0      0
# 1      0
# 2      0
# 3      0
# 4      0
#       ..
# 145    2
# 146    2
# 147    2
# 148    2
# 149    2
# Length: 150, dtype: int8

언급URL : https://stackoverflow.com/questions/38105539/how-to-convert-a-scikit-learn-dataset-to-a-pandas-dataset

반응형