2016-08-11 3 views
0

Я пытаюсь изменить одну «ячейку» в кадре данных. Теперь, модификация работает, но я получаю это предупреждение:Получение настроекWithCopy Предупреждение, несмотря на использование метода .loc в dataframe

In [131]: df.loc[df['Access date'] == '06/01/2016 00:35:34', 'Title'] = 'XXXXXXXX' 
ipython:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 

Per Pandas: Replacing column values in dataframe Я утра используя .loc метод, но я получаю это предупреждение (я не вижу копию dataframe, что я, мол, изменяющее в любом месте здесь)

Если это предупреждение произошло здесь? Если нет, как его отключить?

UPDATE

Кажется, что df является (weakref) копия другого dataframe (проверено с .is_copy).

+0

Я не очень знаком с пандами еще, не вы хотите 'df.loc [ф.р. [ 'даты доступа'] == '06/01/2016 00:35:34' ]. LOC ['Title'] = 'XXXXXX'', чтобы предотвратить предупреждение? (У меня нет подсказки, если это делает то, что вы хотите, конечно) –

+0

У строки, которую вы опубликовали, нет проблем. 'df', вероятно, является срезом другого DataFrame. Вы можете проверить 'df.is_copy'? – ayhan

+0

его только предупреждение FYI, код все равно будет работать. – Merlin

ответ

0

Эта ссылка в предупреждении подробно описывает проблему в разделе: Почему присвоение не работает при использовании цепочки индексирования?

Резюме раздела: pandas не гарантирует защиту памяти от массивов в определенных ситуациях, поэтому предупреждение существует даже при определенных реализациях .loc, чтобы сказать вам, что это может быть крайне неэффективно.

Чтобы отключить предупреждения, вы можете использовать библиотеку предупреждений и выполнить следующий код в одной из ваших ячеек ноутбука ipython.

import warnings 
warnings.catch_warnings() 
warnings.simplefilter("ignore") 
Смежные вопросы