Выбор ответа Senior Series, DataFrame и индекс обновлено
Copy-on-Write и изменение выборки
Вопрос
pandas 3.0. Что выведет код?
import pandas as pd
df = pd.DataFrame({'a': [1, -2, 3], 'b': [0, 0, 0]})
d2 = df[df['a'] > 0]
d2['b'] = 1
print(df['b'].tolist())
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [0, 0, 0] без предупреждений. В pandas 3.0 включён Copy-on-Write: любой результат индексации ведёт себя как независимая копия. d2["b"] = 1 меняет только d2, исходный df не трогается, и SettingWithCopyWarning больше нет (он удалён вместе со старым поведением).
Варианты ответа
[0, 0, 0]без предупрежденийправильный ответ[1, 0, 1][0, 0, 0]и SettingWithCopyWarning- Ошибка: нельзя менять отфильтрованный DataFrame
Разбор
В pandas 3.0 включён Copy-on-Write: любой результат индексации ведёт себя как независимая копия. d2["b"] = 1 меняет только d2, исходный df не трогается, и SettingWithCopyWarning больше нет (он удалён вместе со старым поведением). В pandas 2.x этот код давал то же значение df, но с предупреждением. [1, 0, 1] было бы, если бы фильтр возвращал view, этого не происходит ни в одной версии. Ошибки нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.