gpt4 book ai didi

python - Specifically silent Pandas SettingWithCopyWarning 使用警告上下文管理器?

转载 作者:行者123 更新时间:2023-12-02 17:05:18 24 4
gpt4 key购买 nike

我有显示所有警告的政策:

import warnings
warnings.simplefilter('always')

我想使用上下文管理器消除一些误报的 Pandas 警告:

with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=SettingWithCopyWarning)
# Some assignment raising false positive warning that should be silenced

# Some assignment actually raising a true positive warning

但是看了Pandas source之后,我找不到对象 SettingWithCopyWarning 在 Pandas 中定义的位置。

有人知道这个对象在 Pandas 命名空间中的什么地方定义吗?

最佳答案

将评论中的信息合并为一个答案:

import warnings
import pandas as pd

正如@Andrew 所指出的,我可以使用专用的 Pandas 上下文管理器来实现它:

with pd.option_context('mode.chained_assignment', None):
# Chaining Assignment, etc...

或者使用 PSL warnings 提供我可以找到警告 SettingWithCopyWarning 对象(感谢@coldspeed 提供 GitHub 链接):

with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=pd.core.common.SettingWithCopyWarning)
# Chaining Assignment, etc...

请注意,这两种解决方案的行为似乎相似,但它们并不完全相同:

  • Pandas 上下文管理器临时更改 Pandas 选项,然后将其恢复;
  • PSL Context Manager捕获特定警告并在不更改 Pandas 选项的情况下将其静音。

附加信息

将此特定警告转换为错误是值得的:

pd.set_option('mode.chained_assignment', 'raise')

这将迫使您的开发避免那些特定的边缘情况,并强制您的代码明确声明它是在 View 上工作还是仅在副本上工作。

当然可以像往常一样捕获异常:

try:
# Chaining Assignment, etc...
except pd.core.common.SettingWithCopyError:
pass

但在这种情况下,将警告转换为错误可能会迫使您修改不明确的代码,直到错误消失,而不是捕获相关的异常。

观察

恕我直言,这些警告完全静音:

pd.set_option('mode.chained_assignment', None)

这是一种不好的做法,无助于生成更好的代码。

关于python - Specifically silent Pandas SettingWithCopyWarning 使用警告上下文管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52042603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com