Pandas Future 경고를 억제하는 방법은 무엇입니까?


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) 

나는 메시지를 받았지만 Pandas가 그러한 메시지를 계속해서 보여주는 것을 멈추고 싶습니다. Pandas가 'Future warning'을 표시하지 않도록 설정할 수있는 내장 매개 변수가 있습니까?

답변:


265

github 에서 이것을 찾았습니다 ...

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

import pandas

28
NB는 다음을 넣어 warnings....ignore 전에 (가) import pandas...원인을 FutureWarning무시.
michael

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.

>>>

표준 라이브러리 의미에서 이것은 진정한 경고가 아닙니다 . 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

더 많은 추격은 내가 이것에 대한 시간이 없다는 것을 보여줍니다. 그리고 당신도 아마 그렇지 않을 것입니다. 바라건대 이것은 당신이 토끼의 구멍에서 떨어지는 것을 막거나 누군가가 이러한 메시지를 진정으로 억제하는 방법을 알아 내도록 영감을 줄 것입니다!


7

경고는 성가시다. 다른 답변에서 언급했듯이 다음을 사용하여 억제 할 수 있습니다.

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

그러나 하나씩 처리하고 더 큰 코드베이스를 관리하고 있다면 경고를 일으키는 코드 줄을 찾기가 어려울 것입니다. 오류와 달리 경고는 코드 추적과 함께 제공되지 않기 때문입니다. 오류와 같은 경고를 추적하려면 코드 상단에 다음을 작성할 수 있습니다.

import warnings
warnings.filterwarnings("error")

그러나 코드베이스가 더 크고 다른 라이브러리 / 패키지를 가져 오는 경우 모든 종류의 경고가 오류로 발생하기 시작합니다. 특정 유형의 경고 (귀하의 경우 FutureWarning) 만 오류로 발생 시키려면 다음과 같이 작성할 수 있습니다.

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.