Comment supprimer l'avertissement de Pandas Future?


118

Lorsque j'exécute le programme, Pandas donne à chaque fois un «avertissement futur» 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 msg, mais je veux juste empêcher Pandas d'afficher un tel msg encore et encore, y a-t-il un paramètre de construction que je peux définir pour permettre aux Pandas de ne pas afficher le 'Avertissement futur'?

Réponses:


265

Trouvé ceci sur github ...

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

import pandas

28
nb: mettre le warnings....ignore avant le import pandas...pour que le FutureWarningsoit ignoré.
michael

18

La réponse de @ bdiamante ne peut que partiellement vous aider. Si vous recevez toujours un message après avoir supprimé les avertissements, c'est parce que la pandasbibliothèque elle-même imprime le message. Vous ne pouvez pas faire grand-chose à ce sujet à moins que vous ne modifiiez vous-même le code source de Pandas. Peut-être qu'il y a une option en interne pour les supprimer, ou un moyen de remplacer les choses, mais je n'ai pas pu en trouver.


Pour ceux qui ont besoin de 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)

>>>

Suivant les conseils de @ bdiamante, vous utilisez la warningsbibliothèque. Maintenant, fidèle à sa parole, les avertissements ont été supprimés. Cependant, plusieurs messages embêtants restent:

>>> 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 de tous les avertissements produit 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 standard des bibliothèques, ce ne sont pas de véritables avertissements . Pandas met en œuvre son propre système d'alerte. L'exécution grep -rndes messages d'avertissement montre que le pandassystème d'avertissement est implémenté 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

La poursuite montre que je n'ai pas le temps pour ça. Et vous non plus probablement. Espérons que cela vous évitera de tomber dans le terrier du lapin ou inspirera peut-être quelqu'un à trouver comment supprimer vraiment ces messages!


7

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 souhaitez les gérer un par un et que vous gérez une base de code plus grande, il sera difficile de trouver la ligne de code à l'origine de l'avertissement. Étant donné que les avertissements contrairement aux erreurs ne sont pas fournis avec le suivi du code. Afin de retracer les avertissements tels que 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 générés comme des erreurs. Afin de ne lever que certains types d'avertissements (dans votre cas, son FutureWarning) comme erreur, vous pouvez écrire:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.