Jak powstrzymać ostrzeżenie Pandas Future?

118

Kiedy uruchamiam program, Pandas za każdym razem wyświetla „Ostrzeżenie o przyszłości”, jak poniżej.

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) 

Otrzymałem wiadomość, ale chcę po prostu zatrzymać wyświetlanie takiej wiadomości przez Pandy. Czy jest jakiś parametr buildin, który mogę ustawić, aby Pandas nie wyświetlał `` Ostrzeżenia o przyszłości ''?

wielki robak
źródło

Odpowiedzi:

265

Znalazłem to na githubie ...

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

import pandas
bdiamante
źródło
28
UWAGA: umieścić warnings....ignore przedimport pandas... aby spowodować, że FutureWarningbędą ignorowane.
michael
18

Odpowiedź @ bdiamante może tylko częściowo pomóc. Jeśli nadal otrzymujesz komunikat po zniesieniu ostrzeżeń, to dlatego, że pandassama biblioteka drukuje komunikat. Niewiele możesz z tym zrobić, chyba że samodzielnie edytujesz kod źródłowy Pandas. Może istnieje wewnętrzna opcja ich stłumienia lub sposób na zastąpienie pewnych rzeczy, ale nie mogłem go znaleźć.


Dla tych, którzy chcą wiedzieć, dlaczego ...

Załóżmy, że chcesz zapewnić czyste środowisko pracy. Na początku skryptu umieść pd.reset_option('all'). Dzięki Pandas 0.23.4 otrzymujesz:

>>> 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)

>>>

Zgodnie z radą @ bdiamante korzystasz z warningsbiblioteki. Teraz, zgodnie z tym, co mówi, ostrzeżenia zostały usunięte. Pozostało jednak kilka nieznośnych wiadomości:

>>> 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.

>>>

W rzeczywistości wyłączenie wszystkich ostrzeżeń daje ten sam wynik:

>>> 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.

>>>

W sensie biblioteki standardowej nie są to prawdziwe ostrzeżenia . Pandy wdrażają swój własny system ostrzegawczy. Uruchomienie grep -rnkomunikatów ostrzegawczych pokazuje, że pandassystem ostrzegawczy jest zaimplementowany w 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

Dalsze pogoń pokazuje, że nie mam na to czasu. I prawdopodobnie też nie. Miejmy nadzieję, że to uchroni cię przed wpadnięciem do króliczej nory lub może zainspiruje kogoś do wymyślenia, jak naprawdę stłumić te wiadomości!

Lorem Ipsum
źródło
7

Ostrzeżenia są denerwujące. Jak wspomniano w innych odpowiedziach, możesz je stłumić za pomocą:

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

Ale jeśli chcesz obsłużyć je jeden po drugim i zarządzasz większą bazą kodu, trudno będzie znaleźć wiersz kodu, który powoduje ostrzeżenie. Ponieważ ostrzeżenia w przeciwieństwie do błędów nie są dostarczane wraz ze śledzeniem kodu. Aby śledzić ostrzeżenia, takie jak błędy, możesz napisać to u góry kodu:

import warnings
warnings.filterwarnings("error")

Ale jeśli baza kodu jest większa i importuje kilka innych bibliotek / pakietów, wtedy wszelkiego rodzaju ostrzeżenia zaczną być zgłaszane jako błędy. Aby podnieść tylko określony typ ostrzeżeń (w twoim przypadku jego FutureWarning) jako błąd, możesz napisać:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Alok Nayak
źródło