188 votes

Comment supprimer l'avertissement de Pandas Future ?

Lorsque je lance le programme, Pandas donne à chaque fois un 'Future warning' comme ci-dessous.

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) 

J'ai reçu le message, mais je veux juste empêcher Pandas d'afficher ce message encore et encore, y a-t-il un paramètre de construction que je peux définir pour que Pandas ne fasse pas apparaître le 'Future warning' ?

401voto

bdiamante Points 6542

J'ai trouvé ça sur github ...

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

import pandas

26voto

Lorem Ipsum Points 971

La réponse de @bdiamante ne peut vous aider que partiellement. Si vous obtenez toujours un message après avoir supprimé les avertissements, c'est parce que l'option pandas La bibliothèque elle-même imprime le message. Il n'y a pas grand-chose que vous puissiez faire à moins de modifier vous-même le code source de Pandas. Il existe peut-être une option interne pour les supprimer, ou un moyen de passer outre, mais je n'en ai pas trouvé.


Pour ceux qui besoin de pour savoir pourquoi...

Supposons que vous souhaitiez garantir un environnement de travail propre. En haut de votre script, vous mettez pd.reset_option('all') . Avec Pandas 0.23.4, vous obtenez ce qui suit :

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

>>>

En suivant les conseils de @bdiamante, vous utilisez la fonction warnings bibliothèque. Maintenant, fidèle à sa parole, la avertissements ont été supprimés. Cependant, plusieurs messages gênants subsistent :

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

>>>

En fait, la désactivation tous Les avertissements produisent le même résultat :

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

>>>

Au sens de la bibliothèque standard, ce ne sont pas de vrais avertissements . Pandas met en œuvre son propre système d'avertissements. Exécution de grep -rn sur les messages d'avertissement montre que l pandas Le système d'alerte est mis en œuvre dans 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

Une poursuite supplémentaire montre que je n'ai pas le temps pour cela. Et vous n'en avez probablement pas non plus. J'espère que cela vous évitera de tomber dans le trou du lapin ou que cela incitera quelqu'un à trouver le moyen de supprimer réellement ces messages !

18voto

user1756427 Points 40

Les avertissements sont ennuyeux. Comme mentionné dans d'autres réponses, vous pouvez les supprimer en utilisant :

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

Mais si vous voulez les traiter un par un et que vous gérez une base de code plus importante, il sera difficile de trouver la ligne de code à l'origine de l'avertissement. En effet, contrairement aux erreurs, les avertissements ne sont pas accompagnés d'une trace de code. Afin de tracer les avertissements comme les erreurs, vous pouvez écrire ceci en haut du code :

import warnings
warnings.filterwarnings("error")

Mais si la base de code est plus grande et qu'elle importe un tas d'autres bibliothèques/packages, alors toutes sortes d'avertissements commenceront à être levés comme des erreurs. Afin d'élever seulement un certain type d'avertissements (dans votre cas, c'est FutureWarning) comme erreur, vous pouvez écrire :

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

15voto

Mikko Haavisto Points 71

Voici la version du gestionnaire de contexte, si vous souhaitez uniquement supprimer les avertissements pour des lignes de code spécifiques.

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

8voto

SANDY Points 81

Il suffit de mettre cette ligne avant de commencer le code.

import warnings
warnings.filterwarnings("ignore")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X