[英]How to suppress Pandas Future warning ?
当我运行程序时,Pandas 每次都会给出如下所示的“未来警告”。
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,但我只想阻止 Pandas 一次又一次地显示这样的 msg,是否有任何内置参数可以设置让 Pandas 不弹出“未来警告”?
在github上找到了这个...
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
import pandas
@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 的建议,您可以使用warnings
库。 现在,言归正传,警告已被删除。 但是,仍然存在一些令人讨厌的消息:
>>> 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.
>>>
在标准库的意义上,这些都不是真正的警告。 Pandas 实现了自己的警告系统。 运行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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.