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

118

Когда я запускаю программу, 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) 

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

bigbug
источник

Ответы:

267

Нашел это на github ...

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

import pandas
bdiamante
источник
28
NB: поставить warnings....ignore передimport pandas... тем, чтобы вызвать FutureWarningигнорироваться.
Майкл
18

Ответ @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

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

Lorem Ipsum
источник
7

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

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

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

import warnings
warnings.filterwarnings("error")

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

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Алок Наяк
источник