Bagaimana cara menekan peringatan Pandas Future?

118

Saat saya menjalankan program, Pandas memberikan 'Peringatan Masa Depan' seperti di bawah ini setiap saat.

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) 

Saya mendapat pesan, tetapi saya hanya ingin menghentikan Pandas menampilkan pesan seperti itu lagi dan lagi, apakah ada parameter buildin yang dapat saya setel agar Pandas tidak memunculkan 'Peringatan mendatang'?

bigbug
sumber

Jawaban:

265

Menemukan ini di github ...

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

import pandas
bdiamante.dll
sumber
28
nb: menempatkan warnings....ignore sebelum yang import pandas...menyebabkan FutureWarninguntuk diabaikan.
michael
18

Jawaban @ bdiamante mungkin hanya membantu Anda sebagian. Jika Anda masih mendapatkan pesan setelah Anda menyembunyikan peringatan, itu karena pandasperpustakaan itu sendiri yang mencetak pesan tersebut. Tidak banyak yang dapat Anda lakukan kecuali Anda mengedit sendiri kode sumber Pandas. Mungkin ada pilihan secara internal untuk menekannya, atau cara untuk menimpanya, tapi saya tidak bisa menemukannya.


Bagi yang perlu tahu kenapa ...

Misalkan Anda ingin memastikan lingkungan kerja yang bersih. Di bagian atas naskah Anda, Anda meletakkan pd.reset_option('all'). Dengan Pandas 0.23.4, Anda mendapatkan yang berikut:

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

>>>

Mengikuti saran @ bdiamante, Anda menggunakan warningsperpustakaan. Sekarang, sesuai dengan kata-katanya, peringatan telah dihapus. Namun, beberapa pesan mengganggu tetap ada:

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

>>>

Nyatanya, menonaktifkan semua peringatan menghasilkan keluaran yang sama:

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

>>>

Dalam pengertian pustaka standar, ini bukanlah peringatan yang sebenarnya . Panda menerapkan sistem peringatannya sendiri. Berjalan grep -rnpada pesan peringatan menunjukkan bahwa pandassistem peringatan diimplementasikan dalam 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

Pengejaran lebih lanjut menunjukkan bahwa saya tidak punya waktu untuk ini. Dan Anda mungkin juga tidak. Semoga ini menyelamatkan Anda dari jatuh ke lubang kelinci atau mungkin menginspirasi seseorang untuk mencari cara bagaimana benar-benar menekan pesan-pesan ini!

Lorem Ipsum
sumber
7

Peringatan itu mengganggu. Seperti yang disebutkan dalam jawaban lain, Anda dapat menekannya dengan menggunakan:

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

Tetapi jika Anda ingin menanganinya satu per satu dan Anda mengelola basis kode yang lebih besar, akan sulit menemukan baris kode yang menyebabkan peringatan tersebut. Karena peringatan, tidak seperti kesalahan, tidak disertai dengan pelacakan kode. Untuk melacak peringatan seperti kesalahan, Anda dapat menulis ini di bagian atas kode:

import warnings
warnings.filterwarnings("error")

Tetapi jika basis kode lebih besar dan itu mengimpor banyak pustaka / paket lain, maka semua jenis peringatan akan mulai dimunculkan sebagai kesalahan. Untuk memunculkan hanya jenis peringatan tertentu (dalam kasus Anda, FutureWarning-nya) sebagai kesalahan, Anda dapat menulis:

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