pandas 忽略使用panda的openpyxl的用户警告

mutmk8jj  于 2023-01-19  发布在  其他
关注(0)|答案(3)|浏览(329)

我需要加载大量的.xlsm文件。每个Excel文件有6个工作表。因此,我使用Pandas像这样打开每个Excel文件:

for excel_file in files_list:
    with pd.ExcelFile(excel_file, engine = "openpyxl") as f:
        df1 = pd.read_excel(f, "Sheet1")
        df2 = pd.read_excel(f, "Sheet2")
        df3 = pd.read_excel(f, "Sheet3")
        ...

每次迭代后,我将df传递给其他函数并对它做一些操作,我使用pd.ExcelFile将文件加载到内存中,然后在DataFrame上将其分离。
但是,在执行此操作时,我收到以下警告:

/opt/anaconda3/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py:300: UserWarning: Data Validation extension is not supported and will be removed
warn(msg)

不管警告如何,Excel文件中的信息都被正确加载,没有数据丢失,将每个Excel文件及其所有工作表加载到df中大约需要0.8秒,如果我使用Pandas上的默认引擎加载每个Excel文件,警告就消失了,但加载每个文件所需的时间会增加到5秒甚至6秒。
我看到了this的帖子,但没有关于如何删除警告的答案,这是我所需要的,因为一切都工作正常。
如何禁用上述UserWarning?

ldioqlga

ldioqlga1#

您可以使用warnings核心模块完成此操作:

import warnings

warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl')

您还可以通过添加参数module="openpyxl"来指定您希望使警告静音的特定模块。

4smxwvx5

4smxwvx52#

请参见What causes "UserWarning: Discarded range with reserved name" - openpyxl--不同的警告,相同的解决方案--所以在打开图书后将警告恢复为默认值,因为可能还有其他您确实希望看到的警告。

import warnings
warnings.simplefilter("ignore")
wb = load_workbook(path)
warnings.simplefilter("default")
uqcuzwp8

uqcuzwp83#

如果您希望忽略此警告,并且只在给定的上下文中执行此操作,则可以使用message参数组合catch_warningsfilterwarnings。例如:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", message="Data Validation extension is not supported and will be removed")
    data = pd.read_excel(f, sheet_name=None)

注:sheet_name=None也将一次性读取所有Excel工作表。

相关问题