Ответ 1
Обнаружено это на github...
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
Когда я запускаю программу, 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 не отображал "предупреждение о будущем"?
Обнаружено это на github...
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
Ответ @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
Дальнейшая погоня показывает, что у меня нет на это времени. И вы, вероятно, тоже нет. Надеюсь, это спасет вас от падения в кроличью нору или, возможно, вдохновит кого-то придумать, как по-настоящему подавить эти сообщения!
Я попробовал это, и это сработало для меня:
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
Предупреждения раздражают. Как уже упоминалось в других ответах, вы можете подавить их, используя:
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
Но если вы хотите обрабатывать их один за другим и управлять большей кодовой базой, будет сложно найти строку кода, которая вызывает предупреждение. Так как предупреждения в отличие от ошибок не приходят с трассировкой кода. Чтобы отслеживать предупреждения, такие как ошибки, вы можете написать это в верхней части кода:
import warnings
warnings.filterwarnings("error")
Но если кодовая база больше и она импортирует кучу других библиотек/пакетов, тогда все виды предупреждений будут выдаваться как ошибки. Чтобы выдавать в качестве ошибки только определенный тип предупреждений (в вашем случае это FutureWarning), вы можете написать:
import warnings
warnings.simplefilter(action='error', category=FutureWarning)