Я пытаюсь выбрать несколько строк в кадре данных pandas и сохранить подмножество / выбор в переменную, чтобы я мог выполнить несколько операций над этим подмножеством (включая модификацию) без необходимости повторного выбора. Но я не совсем понимаю, почему это не работает.
Например, это не работает должным образом (исходный df
не изменяется):
df = pd.DataFrame({"a":list(range(1,3))})
subDf = df.loc[df.a==2,:]
subDf.loc[:,"a"] = -1 # also throws SettingWithCopyWarning
# ... do more stuff with subDf...
Но, это работает как ожидалось:
df = pd.DataFrame({"a":list(range(1,3))})
mask = (df.a==2)
df.loc[mask,"a"] = -1
После прочтения документации Pandas по индексному представлению и копии, у меня сложилось впечатление, что выбор с помощью .loc
вернет представление, но, по-видимому, это не так, учитывая SettingWithCopyWarning. Что я тут недопонимаю?