当我运行程序时,熊猫每次都会像下面这样给出“未来警告”。

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) 

我得到了msg,但我只是想阻止熊猫一次又一次地显示这样的msg,是否有任何内置参数,我可以设置让熊猫不弹出“未来警告”?


当前回答

在github上发现了这个…

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

import pandas

其他回答

只需在开始代码之前放入这一行。

import warnings
warnings.filterwarnings("ignore")

警告很烦人。正如在其他答案中提到的,你可以使用以下方法来抑制它们:

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

但是,如果你想一个一个地处理它们,并且你正在管理一个更大的代码库,那么就很难找到引起警告的代码行。因为警告不像错误那样带有代码回溯。为了跟踪像错误这样的警告,你可以在代码的顶部这样写:

import warnings
warnings.filterwarnings("error")

但是如果代码库更大,并且导入了很多其他的库/包,那么所有的警告都将被作为错误抛出。为了只引发特定类型的警告(在你的例子中,它的FutureWarning)作为错误,你可以写:

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

@bdiamante的回答可能只对你有部分帮助。如果在屏蔽警告后仍然收到消息,这是因为pandas库本身正在打印该消息。除非您自己编辑Pandas源代码,否则您对此无能为力。也许内部有一个抑制它们的选择,或者一个覆盖事情的方法,但我找不到。


对于那些想知道原因的人…

假设您想要确保一个干净的工作环境。在脚本的顶部,放置pd.reset_option('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

继续追下去说明我没有时间讲这个了。你可能也不知道。希望这能把你从兔子洞里救出来,或者激励别人想出如何真正地抑制这些信息!

在github上发现了这个…

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

import pandas

下面是上下文管理器版本,如果您只想对特定的代码行删除警告。

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