Назначение выбора панд переменной и затем ее изменение - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь выбрать несколько строк в кадре данных 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. Что я тут недопонимаю?

1 Ответ

0 голосов
/ 27 августа 2018

В subDf = df.loc[df.a==2,:] метод, который вы используете, на самом деле __getitem__ (df.loc.__getitem__), который не гарантированно возвращает представление.Когда вы назначаете что-то на loc (например, df.loc[mask,"a"] = -1), вы фактически звоните __setitem__ (df.loc.__setitem__).Здесь, поскольку он должен присвоить значение этому срезу, он гарантированно будет представлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...