Я столкнулся с очень распространенным SettingWithCopyWarning
при попытке изменить некоторые значения в DataFrame.Я нашел способ обойти это без необходимости отключать предупреждение, но я чувствую, что сделал это неправильно, и что это излишне расточительно и вычислительно неэффективно.
label_encoded_feature_data_to_be_standardised_X_train = X_train_label_encoded[['price', 'vintage']]
label_encoded_feature_data_to_be_standardised_X_test = X_test_label_encoded[['price', 'vintage']]
label_encoded_standard_scaler = StandardScaler()
label_encoded_standard_scaler.fit(label_encoded_feature_data_to_be_standardised_X_train)
X_train_label_encoded_standardised = label_encoded_standard_scaler.transform(label_encoded_feature_data_to_be_standardised_X_train)
X_test_label_encoded_standardised = label_encoded_standard_scaler.transform(label_encoded_feature_data_to_be_standardised_X_test)
Вот как это настроено, тогда я получаю предупреждение, если я делаю это:
X_train_label_encoded.loc[:,'price'] = X_train_label_encoded_standardised[:,0]
, если я делаю это:
X_train_label_encoded_standardised_df = pd.DataFrame(data=X_train_label_encoded_standardised, columns=['price', 'vintage'])
ИЯ решил это следующим образом:
X_train_label_encoded = X_train_label_encoded.drop('price', axis=1)
X_train_label_encoded['price'] = X_train_label_encoded_standardised_df.loc[:,'price']
Это также работает:
X_train_label_encoded.replace(to_replace=X_train_label_encoded['price'], value=X_train_label_encoded_standardised_df['price'])
Но даже это кажется слишком неуклюжим с дополнительным созданием DataFrame.
Почему я не могу просто как-то назначить столбец?Или используя какое-то расположение метода замены?В документации, похоже, нет решения, или я просто читаю это неправильно?Отсутствует какое-то очевидное, но не прописанное решение?
Есть ли лучший способ сделать это?