Wie kann man die zukünftige Warnung von Pandas unterdrücken?


118

Wenn ich das Programm starte, gibt Pandas jedes Mal eine 'Zukunftswarnung' wie unten.

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) 

Ich habe die Nachricht erhalten, möchte aber nur verhindern, dass Pandas diese Nachricht immer wieder anzeigt. Gibt es einen eingebauten Parameter, den ich festlegen kann, damit Pandas die 'Zukunftswarnung' nicht anzeigt?

Antworten:


265

Fand dies auf Github ...

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

import pandas

28
nb: setze das warnings....ignore vor das import pandas..., FutureWarningdamit das ignoriert wird.
Michael

18

Die Antwort von @ bdiamante kann Ihnen nur teilweise helfen. Wenn Sie nach dem Unterdrücken von Warnungen immer noch eine Nachricht erhalten, druckt die pandasBibliothek die Nachricht selbst. Sie können nicht viel dagegen tun, wenn Sie den Pandas-Quellcode nicht selbst bearbeiten. Vielleicht gibt es eine interne Option, um sie zu unterdrücken, oder eine Möglichkeit, Dinge zu überschreiben, aber ich konnte keine finden.


Für diejenigen, die wissen müssen warum ...

Angenommen, Sie möchten eine saubere Arbeitsumgebung sicherstellen. Ganz oben in Ihrem Skript setzen Sie pd.reset_option('all'). Mit Pandas 0.23.4 erhalten Sie Folgendes:

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

>>>

Befolgen Sie die Anweisungen von @ bdiamante, um die warningsBibliothek zu verwenden. Nun wurden die Warnungen entfernt. Es bleiben jedoch einige lästige Nachrichten:

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

>>>

Wenn Sie alle Warnungen deaktivieren, wird dieselbe Ausgabe ausgegeben:

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

>>>

Im Sinne einer Standardbibliothek sind dies keine echten Warnungen . Pandas implementiert ein eigenes Warnsystem. Das Ausführen grep -rnder Warnmeldungen zeigt, dass das pandasWarnsystem implementiert ist in 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

Weitere Verfolgungsjagden zeigen, dass ich dafür keine Zeit habe. Und wahrscheinlich auch nicht. Hoffentlich erspart Ihnen dies das Herunterfallen in den Kaninchenbau oder inspiriert jemanden, herauszufinden, wie Sie diese Botschaften wirklich unterdrücken können!


7

Warnungen sind ärgerlich. Wie in anderen Antworten erwähnt, können Sie sie unterdrücken, indem Sie:

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

Wenn Sie sie jedoch einzeln behandeln möchten und eine größere Codebasis verwalten, ist es schwierig, die Codezeile zu finden, die die Warnung verursacht. Da Warnungen im Gegensatz zu Fehlern nicht mit Code-Traceback geliefert werden. Um Warnungen wie Fehler zu verfolgen, können Sie diese oben in den Code schreiben:

import warnings
warnings.filterwarnings("error")

Wenn die Codebasis jedoch größer ist und eine Reihe anderer Bibliotheken / Pakete importiert, werden alle Arten von Warnungen als Fehler ausgegeben. Um nur bestimmte Arten von Warnungen (in Ihrem Fall FutureWarning) als Fehler auszulösen, können Sie Folgendes schreiben:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.