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

Когда я запускаю программу, 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 не всплывал с предупреждением о будущем?


person bigbug    schedule 03.04.2013    source источник


Ответы (4)


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

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

import pandas
person bdiamante    schedule 03.04.2013
comment
Примечание: поместите warnings....ignore перед import pandas..., чтобы FutureWarning игнорировался. - person michael; 08.12.2017
comment
Привет, я получаю предупреждение о будущем, несмотря на добавление этих строк. - person Eswar; 06.10.2020

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

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

person Lorem Ipsum    schedule 21.12.2018
comment
Я обнаружил, что это работает с pandas предупреждениями об импорте; warnings.filterwarnings (игнорировать) - person metersk; 22.01.2021
comment
›Дальнейшая погоня показывает, что у меня нет на это времени. И вы, вероятно, тоже этого не сделаете. Я в долгу перед тобой, чувак. - person Carl Boneri; 04.02.2021

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

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

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

import warnings
warnings.filterwarnings("error")

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

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
person Alok Nayak    schedule 27.09.2019

Вот версия диспетчера контекста, если вы хотите подавить предупреждения только для определенных строк кода.

import warnings
with warnings.catch_warnings():
    warnings.simplefilter(action='ignore', category=FutureWarning)
    # Warning-causing lines of code here
person Mikko Haavisto    schedule 06.03.2021