¿Cómo suprimir la advertencia de Pandas Future?

118

Cuando ejecuto el programa, Pandas da 'Advertencia futura' como se muestra a continuación cada vez.

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) 

Recibí el mensaje, pero solo quiero evitar que Pandas muestre dicho mensaje una y otra vez, ¿hay algún parámetro de construcción que pueda configurar para que Pandas no muestre la 'Advertencia futura'?

bigbug
fuente

Respuestas:

265

Encontré esto en github ...

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

import pandas
bdiamante
fuente
28
nb: poner el warnings....ignore antes del import pandas...para hacer FutureWarningque se ignore.
Michael
18

La respuesta de @ bdiamante puede ayudarlo solo parcialmente. Si aún recibe un mensaje después de haber suprimido las advertencias, es porque la pandaspropia biblioteca está imprimiendo el mensaje. No hay mucho que pueda hacer al respecto a menos que edite el código fuente de Pandas usted mismo. Tal vez haya una opción internamente para suprimirlos, o una forma de anular cosas, pero no pude encontrar una.


Para aquellos que necesitan saber por qué ...

Suponga que desea garantizar un entorno de trabajo limpio. En la parte superior de tu guión, pones pd.reset_option('all'). Con Pandas 0.23.4, obtienes lo siguiente:

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

>>>

Siguiendo los consejos de @ bdiamante, usa la warningsbiblioteca. Ahora, fiel a su palabra, las advertencias se han eliminado. Sin embargo, quedan varios mensajes molestos:

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

>>>

De hecho, deshabilitar todas las advertencias produce el mismo resultado:

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

>>>

En el sentido de biblioteca estándar, estas no son verdaderas advertencias . Pandas implementa su propio sistema de advertencias. La ejecución grep -rnde los mensajes de advertencia muestra que el pandassistema de advertencia está implementado en 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

Seguir persiguiendo demuestra que no tengo tiempo para esto. Y probablemente tú tampoco. ¡Con suerte, esto le evitará caer por la madriguera del conejo o tal vez inspire a alguien a descubrir cómo suprimir realmente estos mensajes!

Lorem Ipsum
fuente
7

Las advertencias son molestas. Como se mencionó en otras respuestas, puede suprimirlas usando:

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

Pero si desea manejarlos uno por uno y está administrando una base de código más grande, será difícil encontrar la línea de código que está causando la advertencia. Dado que las advertencias, a diferencia de los errores, no vienen con rastreo de código. Para rastrear advertencias como errores, puede escribir esto en la parte superior del código:

import warnings
warnings.filterwarnings("error")

Pero si el código base es más grande y está importando un montón de otras bibliotecas / paquetes, todo tipo de advertencias comenzarán a aparecer como errores. Para generar solo cierto tipo de advertencias (en su caso, FutureWarning) como error, puede escribir:

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