@fors_official

Почему при замене значения в DataFrame на pandas происходит ошибка, но значение меняется?

Я хочу заменить значение в датафрейме находящиеся по индексу 2 в столбце price, но Pycharm выдает ошибку. Я почитал документацию которую он выдает, но не совсем понял как мне заменить значение в определенном столбце по индексу, а не по значению.
Вот код:
info = {'color': ['blue', 'green', 'yellow', 'red', 'white'],
        'object': ['ball', 'pen', 'pencil', 'paper', 'mug'],
        'price': [1.2, 1.0, 0.6, 0.9, 1.7]}
frame = pd.DataFrame(info)
frame['price'][2] = 3
print(frame)


Вот ошибка:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_...
frame['price'][2] = 3
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
1. Это не ошибка, а предупреждение которому сто лет в обед, более того в зависимости от твоей версии pandas, ты можешь видеть не одно а сразу два предупреждения. В pandas давно уже целый раздел документации посвящен этому copy_on_write

2. Детали про copy_on_write прочтешь в документации, там все расписано не хочу повторяться. Собираешься работать с pandas, ты должен знать что это такое.

3. Правильный способ безопасно осуществить операцию, которую ты хочешь (что бы не было предупреждений и работало, как ты ожидаешь.
pd.options.mode.copy_on_write = True
info = {'color': ['blue', 'green', 'yellow', 'red', 'white'],
'object': ['ball', 'pen', 'pencil', 'paper', 'mug'],
'price': [1.2, 1.0, 0.6, 0.9, 1.7]}
frame = pd.DataFrame(info)
frame.loc[2,'price'] = 100 
print(frame)

Ну и обнови на всякий случай pandas по скольку copy_on_write будет по умолчанию установлен в True в будущих версиях.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы