Làm thế nào để đàn áp Pandas Cảnh báo tương lai?


118

Khi tôi chạy chương trình, Pandas đưa ra 'Cảnh báo tương lai' như bên dưới mỗi lần.

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) 

Tôi đã nhận được thông báo, nhưng tôi chỉ muốn ngăn chặn Pandas hiển thị thông báo như vậy hết lần này đến lần khác, có bất kỳ tham số xây dựng nào tôi có thể đặt để Pandas không bật lên 'Cảnh báo tương lai' không?

Câu trả lời:


265

Tìm thấy cái này trên github ...

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

import pandas

28
nb: đặt warnings....ignore trước các import pandas...để gây ra FutureWarningđể được bỏ qua.
michael

18

Câu trả lời của @ bdiamante chỉ có thể giúp bạn một phần. Nếu bạn vẫn nhận được một tin nhắn sau khi bạn đã loại bỏ các cảnh báo, thì đó là do pandaschính thư viện đang in tin nhắn. Bạn không thể làm gì nhiều về điều đó trừ khi bạn tự chỉnh sửa mã nguồn Pandas. Có thể có một tùy chọn bên trong để triệt tiêu chúng hoặc cách ghi đè lên mọi thứ, nhưng tôi không thể tìm thấy.


Dành cho những ai cần biết tại sao ...

Giả sử bạn muốn đảm bảo một môi trường làm việc sạch sẽ. Ở đầu kịch bản của bạn, bạn đặt pd.reset_option('all'). Với Pandas 0.23.4, bạn nhận được những điều sau:

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

>>>

Theo lời khuyên của @ bdiamante, bạn sử dụng warningsthư viện. Bây giờ, đúng như lời của nó, các cảnh báo đã được gỡ bỏ. Tuy nhiên, một số tin nhắn pesky vẫn còn:

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

>>>

Trong thực tế, vô hiệu hóa tất cả các cảnh báo tạo ra cùng một đầu ra:

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

>>>

Theo nghĩa thư viện tiêu chuẩn, đây không phải là những cảnh báo đúng . Gấu trúc thực hiện hệ thống cảnh báo riêng của mình. Chạy grep -rntrên các thông báo cảnh báo cho thấy pandashệ thống cảnh báo được triển khai trong 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

Theo đuổi thêm cho thấy tôi không có thời gian cho việc này. Và có lẽ bạn cũng không. Hy vọng rằng điều này sẽ giúp bạn không rơi xuống hố thỏ hoặc có thể truyền cảm hứng cho ai đó để tìm ra cách thực sự đàn áp những thông điệp này!


7

Cảnh báo là gây phiền nhiễu. Như đã đề cập trong các câu trả lời khác, bạn có thể loại bỏ chúng bằng cách sử dụng:

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

Nhưng nếu bạn muốn xử lý từng cái một và bạn đang quản lý một cơ sở mã lớn hơn, sẽ rất khó để tìm ra dòng mã gây ra cảnh báo. Vì các cảnh báo không giống như các lỗi không đi kèm với mã truy nguyên. Để theo dõi các cảnh báo như lỗi, bạn có thể viết phần này ở đầu mã:

import warnings
warnings.filterwarnings("error")

Nhưng nếu codebase lớn hơn và nó đang nhập một loạt các thư viện / gói khác, thì tất cả các loại cảnh báo sẽ bắt đầu được đưa ra dưới dạng lỗi. Để chỉ đưa ra một số loại cảnh báo nhất định (trong trường hợp của bạn, đó là FutureWarning) là lỗi, bạn có thể viết:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.