Имя этому предупреждению - SettingWithCopyWarning. Оно вызывается из-за возможной проблемы при модификации данных, когда либо изменения вообще не произойдут, либо появятся там, где вы можете их не ожидать. Рассмотрим простой датафрейм:
При различных способах обращения к датафрейму или его части может возвращаться либо представление (при модифицикации будет затронут датафрейм), либо копия данных (тогда изменения затронут только ее). Например, при таком обращении будет возвращена копия, и датафрейм модифицирован не будет:
в то же время, если обратиться так, то изменения в первоисточнике появятся:
Однако рекомендованным способом внесения изменений в срез датафрейма является с использованием оператора loc. Пересоздадим таблицу и применим данный способ:
Вместе с тем большая доля предупреждений приходится при модификации ранее созданной ссылки или копии на датафрейм. Например, при указанном ниже способе возвращается копия и изменения не затронут первоисточник:
С использованием же оператора loc вы гарантируете, что работаете со срезом первоисточника:
Если же вы хотите работать с копией и обезопасить себя от изменения первоисточника явно добавляйте метод copy при создании новой переменной, даже когда это происходит внутри функции. Например, часто предупреждение возникает при создании выборок из данных посредством train_test_split:
Несмотря на то, что функцией возвращается копия, вылетает предупреждение. Если же вы явно передадите в train_test_split параметр df1.copy(), оно не возникнет:
Более грубым способом обхода предупреждения является его запрет:
или вообще запрет всех предупреждений:
import warnings
warnings.filterwarnings('ignore')
Последние два способа не рекомендую: лучше бороться с причиной, нежели закрывать на нее глаза.