0

숫자와 개체가 모두 기능에 포함되어 있습니다. 또한 객체 데이터 유형이있는 일부 기능에는 누락 값이 있습니다. Numput 및 categorial 데이터 유형 모두에 대해 누락 된 값을 처리하기 위해 수정 된 버전의 Imputer (다른 게시물의 지침에 따라)를 만들었지 만 데이터 세트에 적용하면 AttributeError가 반환됩니다. 나는 필자가 필자의 방법에 대한 정의에있어 어리석은 실수를 저지르고 있다고 믿으며, 나는 당신의 통찰력에 감사한다. squeeze() 방법은 mentioned in the documentationscikit-learn에서 범주 데이터 유형으로 열을 대체하는 방법

그래서 모든 일이있는 (대부분의 시간에 대한 의미로 스케일러 객체를 반환하는 1 크기의 물체를 들어

import os 
import pandas as pd 
import numpy as np 
from sklearn.preprocessing import Imputer 

#load the data 
path='~/Desktop/ML/Hands_on/housing_train.csv' 
path=os.path.expanduser(path) 
data=pd.read_csv(path) 

#select the columns_names including dtype=object && missing data 
object_data=data.select_dtypes(include=['object']) 
object_data_null=[] 
for col in object_data.columns: 
    if object_data[col].isnull().any(): 
     object_data_null.append(col) 

class GeneralImputer(Imputer): 
    def __init__(self, **kwargs): 
     Imputer.__init__(self, **kwargs) 

    def fit(self, X, y=None): 
     if self.strategy == 'most_frequent': 
      self.fills = pd.DataFrame(X).mode(axis=0).squeeze() 
      self.statistics_ = self.fills.values 
      return self 
     else: 
      return Imputer.fit(self, X, y=y) 

    def transform(self, X): 
     if hasattr(self, 'fills'): 
      return pd.DataFrame(X).fillna(self.fills).values.astype(str) 
     else: 
      return Imputer.transform(self, X) 

imputer=GeneralImputer(strategy='most_frequent', axis=1) 

for i in object_data_null: 
    imputer.fit(data[i]) 
    data[i]=imputer.transform(data[i]) 


--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-29-989e78355872> in <module>() 
    38 object_data_null 
    39 for i in object_data_null: 
---> 40  imputer.fit(data[i]) 
    41  data[i]=imputer.transform(data[i]) 
    42 

<ipython-input-29-989e78355872> in fit(self, X, y) 
    23   if self.strategy == 'most_frequent': 
    24    self.fills = pd.DataFrame(X).mode(axis=0).squeeze() 
---> 25    self.statistics_ = self.fills.values 
    26    return self 
    27   else: 

AttributeError: 'str' object has no attribute 'values' 

답변

1

: 여기에 내 코드와 오류입니다 여기서 열), 열의 모드는 단일 객체가되고 squeeze()는 문자열 만 반환합니다.

따라서 .values을 가져올 필요가 없습니다. fit() 메서드를 다음과 같이 변경하여 제거하십시오.

+0

감사합니다. @Vivek Kumar –