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_names
dictionary
새을 추가합니다.
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()
고장
- 인지 어떤이그는유로그▁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
'prosource' 카테고리의 다른 글
libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다. (0) | 2023.06.22 |
---|---|
'선택'은 항상 기본 키로 정렬됩니까? (0) | 2023.06.22 |
CPU에서 Tensorflow를 실행하는 방법 (0) | 2023.06.22 |
git 자동 커밋 만들기 (0) | 2023.06.22 |
T-SQL 사용자에게 역할을 부여하는 방법 (0) | 2023.06.22 |