Объединение информации из комментариев в один ответ:
import warnings
import pandas as pd
Как отметил @Andrew, я могу добиться этого с помощью выделенного Pandas Context Manager:
with pd.option_context('mode.chained_assignment', None):
# Chaining Assignment, etc...
Или используя PSL warnings
, при условии, что я могу найти объект предупреждения SettingWithCopyWarning
(спасибо @coldspeed за ссылку GitHub):
with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=pd.core.common.SettingWithCopyWarning)
# Chaining Assignment, etc...
Обратите внимание, что оба решения ведут себя одинаково, но они не совсем эквивалентны:
- Pandas Context Manager временно изменяет параметры Pandas и затем восстанавливает его;
- Диспетчер контекста PSL перехватывает конкретное предупреждение и отключает его без изменения параметров Pandas.
Дополнительная информация
Может быть целесообразно преобразовать это конкретное предупреждение в ошибку:
pd.set_option('mode.chained_assignment', 'raise')
Это заставит вашу разработку избегать этих конкретных крайних случаев и заставит ваш код явно указывать, работает ли он в представлении или только в копии.
Конечно, исключение можно поймать как обычно:
try:
# Chaining Assignment, etc...
except pd.core.common.SettingWithCopyError:
pass
Но в этом случае преобразование предупреждения в ошибку, скорее всего, заставит вас изменять неоднозначный код до тех пор, пока ошибка не исчезнет, вместо того, чтобы перехватить соответствующее исключение.
Наблюдение
ИМХО, полностью отключите эти предупреждения, используя:
pd.set_option('mode.chained_assignment', None)
Это плохая практика, и она не помогает создавать лучший код.