Выбор ответа 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 больше нет (он удалён вместе со старым поведением).

Варианты ответа

  1. [0, 0, 0] без предупрежденийправильный ответ
  2. [1, 0, 1]
  3. [0, 0, 0] и SettingWithCopyWarning
  4. Ошибка: нельзя менять отфильтрованный DataFrame

Разбор

В pandas 3.0 включён Copy-on-Write: любой результат индексации ведёт себя как независимая копия. d2["b"] = 1 меняет только d2, исходный df не трогается, и SettingWithCopyWarning больше нет (он удалён вместе со старым поведением). В pandas 2.x этот код давал то же значение df, но с предупреждением. [1, 0, 1] было бы, если бы фильтр возвращал view, этого не происходит ни в одной версии. Ошибки нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.