Python 如何抑制熊猫的未来预警?

Python 如何抑制熊猫的未来预警?,python,pandas,suppress-warnings,future-warning,Python,Pandas,Suppress Warnings,Future Warning,当我运行这个程序时,熊猫每次都会发出如下的“未来警告” 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) 我得到了消息,但我只是想阻止熊猫一次又一次地显示这样的消息,是否有任何内置参

当我运行这个程序时,熊猫每次都会发出如下的“未来警告”

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) 
我得到了消息,但我只是想阻止熊猫一次又一次地显示这样的消息,是否有任何内置参数可以设置为不让熊猫弹出“未来警告”?


@比迪亚曼特的回答可能只对你有部分帮助。如果在抑制警告后仍然收到消息,那是因为
pandas
库本身正在打印消息。除非你自己编辑熊猫源代码,否则你对此无能为力。也许在内部有一种抑制它们的方法,或者有一种覆盖事物的方法,但我找不到


对于那些需要知道原因的人。。。 假设您希望确保一个干净的工作环境。在脚本的顶部,放置
pd.reset\u选项('all')
。使用Pandas 0.23.4,您可以获得以下内容:

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

>>>
按照@bdiamante的建议,使用
警告库。现在,诚然,警告已经被删除。然而,仍有一些令人讨厌的信息:

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

>>>
事实上,禁用所有警告会产生相同的输出:

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

>>>
在标准的图书馆意义上,这些并不是真正的警告。熊猫执行自己的警告系统。在警告消息上运行
grep-rn
表明
pandas
警告系统在
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

进一步的追踪显示我没有时间做这件事。你可能也不知道。希望这能让你从兔子洞里掉下来,或者也许能激发一些人去思考如何真正地抑制这些信息

警告很烦人。如其他答案中所述,您可以使用以下方法抑制它们:

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
但是如果你想一个接一个地处理它们,并且你正在管理一个更大的代码库,那么很难找到引起警告的代码行。因为与错误不同的警告不会随代码回溯一起出现。为了跟踪错误等警告,您可以在代码顶部编写以下内容:

import warnings
warnings.filterwarnings("error")
但是,如果代码库更大,并且正在导入大量其他库/包,那么所有类型的警告都将作为错误出现。为了仅将某些类型的警告(在您的案例中为其FutureWarning)作为错误发出,您可以编写:

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

如果您只想抑制特定代码行的警告,那么以下是上下文管理器版本

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

注意:将
警告…ignore
放在
导入熊猫之前…
会导致
未来警告被忽略。嘿,尽管添加了这些行,我还是得到了未来警告。我发现这与
熊猫
导入警告一起工作;warnings.filterwarnings(“ignore”)>进一步追踪显示我没有时间这么做。你可能也不知道。我欠你一次人情,伙计。
import warnings
with warnings.catch_warnings():
    warnings.simplefilter(action='ignore', category=FutureWarning)
    # Warning-causing lines of code here