パンダの将来の警告を抑制する方法は?


118

プログラムを実行すると、パンダスは毎回以下のような「未来の警告」を出します。

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) 

メッセージを受け取りましたが、そのようなメッセージを表示するパンダを何度も停止したいのですが、パンダが「将来の警告」をポップアップしないように設定できる組み込みパラメータはありますか?

回答:


265

githubでこれを見つけました...

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

import pandas

28
NB:置くwarnings....ignore 前にimport pandas...引き起こすためにFutureWarning無視されます。
マイケル

18

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

>>>

標準ライブラリの意味では、これらは本当の警告ではありません。パンダは独自の警告システムを実装しています。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

さらに追ってみると、私にはこれに時間がないことがわかります。そしておそらくあなたもそうではありません。うまくいけば、これがウサギの穴から落ちるのを防いだり、おそらくこれらのメッセージを本当に抑制する方法を理解するように誰かを鼓舞したりできます!


7

警告は迷惑です。他の回答で述べたように、以下を使用してそれらを抑制することができます。

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

しかし、それらを1つずつ処理し、より大きなコードベースを管理している場合、警告の原因となっているコード行を見つけるのは困難です。エラーとは異なり、警告にはコードトレースバックが付属していません。エラーのような警告をトレースするために、コードの上部にこれを書くことができます:

import warnings
warnings.filterwarnings("error")

しかし、コードベースがより大きく、他のライブラリ/パッケージの束をインポートしている場合、あらゆる種類の警告がエラーとして発生し始めます。特定の種類の警告(この場合はそのFutureWarning)のみをエラーとして発生させるには、次のように記述します。

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.