Я новичок в питоне. Я работал с некоторыми данными, и я обнаружил некоторые недостающие данные. Что я хотел сделать, так это заполнить некоторые из них средним значением, а некоторые - режимом, а также отбросить некоторые столбцы.

Вот что я делаю

missing_val_count = (train.isnull().sum())
print(missing_val_count[missing_val_count > 0])


Output:
LotFrontage      259
Alley           1369
MasVnrType         8
MasVnrArea         8
BsmtQual          37
BsmtCond          37
BsmtExposure      38
BsmtFinType1      37
BsmtFinType2      38
Electrical         1
FireplaceQu      690
GarageType        81
GarageYrBlt       81
GarageFinish      81
GarageQual        81
GarageCond        81
dtype: int64

У меня столько столбцов с недостающими данными.

train['MasVnrType'].fillna(train['MasVnrType'].replace('NA', None), inplace = True)
train['MasVnrArea'].fillna(train['MasVnrArea'].replace('NA', '0'), inplace = True)

features = ['LotFrontage', 'GarageYrBlt']
for i in features:
    train[i].fillna(train[i].mean(), inplace = True)

features1 = ['Electrical', 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual', 'GarageCond']

for i in features1:
    train[i].fillna(train[i].mode()[0], inplace = True)

train = train.drop(columns = ['Alley'])

missing_val_count = (train.isnull().sum())
print(missing_val_count[missing_val_count > 0])

Когда я запускаю этот код, я получаю

MasVnrType         8
MasVnrArea         8
dtype: int64

Я не могу работать с этими двумя столбцами. Что я делаю не так или что-то упускаю?

-1
Tanmay Pardhi 19 Июл 2020 в 10:38

1 ответ

Лучший ответ

Используйте вместо этого:

train['MasVnrType'].replace('NA', None, inplace=True)
train['MasVnrArea'].replace('NA', '0', inplace=True)

features = ['LotFrontage', 'GarageYrBlt']
train[features] = train[features].fillna(train[features].mean())

features1 = ['Electrical', 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual', 'GarageCond']
train[features1] = train[features1].fillna(train[features1].mode())

Или же

values = train[features].mean().to_dict()
train.fillna(values, inplace=True)

Примере:

df = pd.DataFrame({'A': [1, np.nan, 3], 'B': [10, 20, np.nan], 'C': [100, 200, 'NA']}) 
df['C'].replace('NA', 0, inplace=True)

Выход

     A     B    C
0  1.0  10.0  100
1  NaN  20.0  200
2  3.0   NaN    0

Другая:

features = ['A', 'B']   
value = df[features].mean().to_dict()
df.fillna(value, inplace=True) 

Выход

     A     B    C
0  1.0  10.0  100
1  2.0  20.0  200
2  3.0  15.0    0
0
Pramote Kuacharoen 19 Июл 2020 в 08:56