Як придушити попередження 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) 

Я отримав msg, але я просто хочу зупинити Pandas показувати такі msg знову і знову, чи є якийсь параметр buildin, який я можу встановити, щоб Pandas не вискакував "Попередження про майбутнє"?

Відповіді:


265

Знайшли це на Github ...

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

import pandas

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

Подальше погоню показує, що я не маю на це часу. І ти, мабуть, не робиш жодного. Сподіваємось, це позбавить вас від падіння кролячої нори або, можливо, надихає когось зрозуміти, як справді придушити ці повідомлення!


7

Попередження дратують. Як згадується в інших відповідях, ви можете придушити їх, використовуючи:

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

Але якщо ви хочете опрацювати їх по черзі, а ви керуєте більшою базою кодів, буде складно знайти рядок коду, який викликає попередження. Оскільки попередження, на відміну від помилок, не забезпечуються відстеженням коду. Для того, щоб простежити попередження, як помилки, ви можете записати це у верхній частині коду:

import warnings
warnings.filterwarnings("error")

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

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.