Pandas Future uyarısı nasıl engellenir?


118

Programı çalıştırdığımda Pandalar her seferinde aşağıdaki gibi 'Gelecek uyarısı' veriyor.

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) 

Mesajı aldım, ancak Pandaların tekrar tekrar bu tür mesajlar göstermesini durdurmak istiyorum, Pandaların 'Gelecek uyarısını' açmamasına izin vermek için ayarlayabileceğim herhangi bir yapı parametresi var mı?

Yanıtlar:


265

Bunu github'da buldum ...

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

import pandas

28
nb: koymak warnings....ignore önceimport pandas... neden FutureWarninggözardı edilecektir.
michael

18

@ bdiamante'nin cevabı size sadece kısmen yardımcı olabilir. Uyarıları bastırdıktan sonra hala bir mesaj alıyorsanız, bunun nedeni pandaskütüphanenin mesajı yazdırmasıdır. Pandalar kaynak kodunu kendiniz düzenlemediğiniz sürece bu konuda yapabileceğiniz pek bir şey yoktur. Belki dahili olarak onları bastırma seçeneği veya bir şeyleri geçersiz kılma seçeneği vardır, ancak bulamadım.


Olanlar için ihtiyaç neden bilmek ...

Temiz bir çalışma ortamı sağlamak istediğinizi varsayalım. Senaryonuzun en üstüne koyarsınız pd.reset_option('all'). Pandas 0.23.4 ile aşağıdakileri elde edersiniz:

>>> 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'nin tavsiyesine uyarak, warningskütüphaneyi kullanıyorsunuz. Şimdi, sözüne sadık, uyarılar kaldırıldı. Ancak, birkaç sinir bozucu mesaj kaldı:

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

>>>

Aslında, tüm uyarıları devre dışı bırakmak aynı çıktıyı üretir:

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

>>>

Standart kütüphane anlamında, bunlar gerçek uyarılar değildir . Pandalar kendi uyarı sistemini uygular. grep -rnUyarı mesajlarının üzerinde çalıştırılması , pandasuyarı sisteminin şurada uygulandığını gösterir 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

Daha fazla takip, bunun için zamanım olmadığını gösteriyor. Ve muhtemelen sen de yapmazsın. Umarım bu sizi tavşan deliğine düşmekten kurtarır veya belki de birisine bu mesajları gerçekten nasıl bastıracağını bulması için ilham verir!


7

Uyarılar can sıkıcıdır. Diğer yanıtlarda da belirtildiği gibi, bunları kullanarak bastırabilirsiniz:

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

Ancak bunları tek tek ele almak istiyorsanız ve daha büyük bir kod tabanı yönetiyorsanız, uyarıya neden olan kod satırını bulmak zor olacaktır. Hatalardan farklı uyarılar kod izleme ile gelmediğinden. Hatalar gibi uyarıları izlemek için, bunu kodun en üstüne yazabilirsiniz:

import warnings
warnings.filterwarnings("error")

Ancak kod tabanı daha büyükse ve diğer kitaplıkları / paketleri içe aktarıyorsa, her tür uyarı hata olarak ortaya çıkmaya başlayacaktır. Yalnızca belirli türde uyarıları (sizin durumunuzda, FutureWarning) hata olarak ortaya çıkarmak için şunları yazabilirsiniz:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.