Подтвердить что ты не робот

Как подавить Pandas Будущее предупреждение?

Когда я запускаю программу, Pandas дает "Будущее предупреждение", как показано ниже каждый раз.

D:\Python\lib\site-packages\pandas\core\frame.py:3581: FutureWarning: rename with inplace=True  will return None from pandas 0.11 onward
  " from pandas 0.11 onward", FutureWarning) 

У меня есть msg, но я просто хочу остановить Pandas показывая такой msg снова и снова, есть ли какой-либо параметр buildin, который я могу установить, чтобы Pandas не отображал "предупреждение о будущем"?

4b9b3361

Ответ 1

Обнаружено это на github...

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

Ответ 2

Ответ @bdiamante может помочь вам лишь частично. Если вы по-прежнему получаете сообщение после того, как вы подавили предупреждения, это происходит потому, что сама библиотека pandas печатает сообщение. Вы ничего не можете с этим поделать, если сами не отредактируете исходный код Pandas. Может быть, есть возможность внутренне их подавить или способ переопределить что-то, но я не смог его найти.


Для тех, кому нужно знать, почему...

Предположим, что вы хотите обеспечить чистую рабочую среду. В верхней части вашего скрипта вы помещаете pd.reset_option('all'). С Pandas 0.23.4 вы получаете следующее:

>>> import pandas as pd
>>> pd.reset_option('all')
html.border has been deprecated, use display.html.border instead
(currently both are identical)

C:\projects\stackoverflow\venv\lib\site-packages\pandas\core\config.py:619: FutureWarning: html.bord
er has been deprecated, use display.html.border instead
(currently both are identical)

  warnings.warn(d.msg, FutureWarning)

: boolean
    use_inf_as_null had been deprecated and will be removed in a future
    version. Use 'use_inf_as_na' instead.

C:\projects\stackoverflow\venv\lib\site-packages\pandas\core\config.py:619: FutureWarning:
: boolean
    use_inf_as_null had been deprecated and will be removed in a future
    version. Use 'use_inf_as_na' instead.

  warnings.warn(d.msg, FutureWarning)

>>>

Следуя совету @bdiamante, вы используете библиотеку warnings. Теперь, верное ему слово, предупреждения были удалены. Однако остается несколько неприятных сообщений:

>>> import warnings
>>> warnings.simplefilter(action='ignore', category=FutureWarning)
>>> import pandas as pd
>>> pd.reset_option('all')
html.border has been deprecated, use display.html.border instead
(currently both are identical)


: boolean
    use_inf_as_null had been deprecated and will be removed in a future
    version. Use 'use_inf_as_na' instead.

>>>

Фактически, отключение всех предупреждений приводит к одинаковому результату:

>>> import warnings
>>> warnings.simplefilter(action='ignore', category=Warning)
>>> import pandas as pd
>>> pd.reset_option('all')
html.border has been deprecated, use display.html.border instead
(currently both are identical)


: boolean
    use_inf_as_null had been deprecated and will be removed in a future
    version. Use 'use_inf_as_na' instead.

>>>

В стандартном смысле библиотеки это не настоящие предупреждения. Pandas внедряет свою собственную систему предупреждений. Запуск grep -rn в предупреждающих сообщениях показывает, что система предупреждений pandas реализована в core/config_init.py:

$ grep -rn "html.border has been deprecated"
core/config_init.py:207:html.border has been deprecated, use display.html.border instead

Дальнейшая погоня показывает, что у меня нет на это времени. И вы, вероятно, тоже нет. Надеюсь, это спасет вас от падения в кроличью нору или, возможно, вдохновит кого-то придумать, как по-настоящему подавить эти сообщения!

Ответ 3

Я попробовал это, и это сработало для меня:

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

Ответ 4

Предупреждения раздражают. Как уже упоминалось в других ответах, вы можете подавить их, используя:

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

Но если вы хотите обрабатывать их один за другим и управлять большей кодовой базой, будет сложно найти строку кода, которая вызывает предупреждение. Так как предупреждения в отличие от ошибок не приходят с трассировкой кода. Чтобы отслеживать предупреждения, такие как ошибки, вы можете написать это в верхней части кода:

import warnings
warnings.filterwarnings("error")

Но если кодовая база больше и она импортирует кучу других библиотек/пакетов, тогда все виды предупреждений будут выдаваться как ошибки. Чтобы выдавать в качестве ошибки только определенный тип предупреждений (в вашем случае это FutureWarning), вы можете написать:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)