#python-3.x #pandas
#python-3.x #pandas
Вопрос:
Я пытался использовать reindex
вместо loc
в pandas, поскольку начиная с 0.24 появляется предупреждение о переиндексации с помощью списков.
Проблема, с которой я сталкиваюсь, заключается в том, что я использую loc
для изменения значений моих фреймов данных.
Теперь, если использовать переиндексацию, я теряю это, и если я пытаюсь быть умным, я даже получаю ошибку.
Рассмотрим следующий случай:
df = pd.DataFrame(data=pd.np.zeros(4, 2), columns=['a', 'b'])
ds = pd.Series(data=[1]*3)
Я хочу изменить подмножество значений (при сохранении остальных), чтобы df
сохранить ту же форму.
Итак, это исходное поведение, которое работает (и изменяет значения в подмножестве df[‘a’] на 1)
df.loc[range(3), 'a'] = ds
Но когда я использую переиндексацию, я ничего не могу изменить:
df.reindex(range(3)).loc['a'] = ds
Теперь, когда я пытаюсь что-то вроде этого:
df.loc[:, 'a'].reindex(range(3)) = ds
Я получаю SyntaxError: can't assign to function call
сообщение об ошибке.
Для справки я использую pandas 0.24 и python 3.6.8
Комментарии:
1.
reindex
возвращает копию. Изменение копии не приводит к изменению оригинала. Вот и все.
Ответ №1:
Быстрый ответ от @coldspeed был самым простым, хотя поведение предупреждения вводит в заблуждение. Таким образом, reindex
возвращает копию, когда loc
этого не происходит. Из документов pandas:
Создается новый объект, если новый индекс не эквивалентен текущему и copy= False.
Таким образом, утверждение, что reindex
это альтернатива loc
согласно предупреждению, на самом деле вводит в заблуждение.
Надеюсь, это поможет людям, которые сталкиваются с такой же ситуацией.