จะระงับคำเตือนในอนาคตของแพนด้าได้อย่างไร?


119

เมื่อฉันเรียกใช้โปรแกรม Pandas จะให้ 'คำเตือนในอนาคต' เหมือนด้านล่างทุกครั้ง

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 แสดงข้อความดังกล่าวซ้ำแล้วซ้ำอีกมีพารามิเตอร์ buildin ใดที่ฉันสามารถตั้งค่าเพื่อให้ Pandas ไม่ปรากฏ 'คำเตือนในอนาคต' หรือไม่

คำตอบ:


267

พบสิ่งนี้ในgithub ...

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

import pandas

28
หมายเหตุ: ใส่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.

>>>

ในความรู้สึกห้องสมุดมาตรฐานเหล่านี้จะไม่เป็นความจริงคำเตือน แพนด้าใช้ระบบเตือนภัยของตัวเอง การทำงาน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")

แต่ถ้า codebase ใหญ่กว่าและกำลังนำเข้าไลบรารี / แพ็กเกจอื่น ๆ คำเตือนทุกประเภทจะเริ่มขึ้นเป็นข้อผิดพลาด หากต้องการเพิ่มคำเตือนบางประเภท (ในกรณีของคุณคือ FutureWarning) เป็นข้อผิดพลาดคุณสามารถเขียน:

import warnings
warnings.simplefilter(action='error', category=FutureWarning)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.