如何找出和访问 pandas 警告子类?

Posted

技术标签:

【中文标题】如何找出和访问 pandas 警告子类?【英文标题】:How can I figure out and access pandas warning subclasses? 【发布时间】:2016-05-02 04:36:21 【问题描述】:

我正在尝试对this widely discussed pandas warning 进行故障排除。

在尝试查明位置时(尽管我也对一般如何执行此操作感兴趣),我想设置一个 warnings.simplefilter 以仅在 SettingWithCopyWarning 上出错。

我正在尝试:

import warnings
warnings.simplefilter("error", SettingWithCopyWarning)

这不起作用,因为解释器不知道 SettingWithCopyWarning 是什么。我假设它是由 pandas 创建的警告的子类,但我不确定如何正确设置此过滤器(或如何直接访问该类)。

对于其他颜色,警告(在最新版本的 python 或 pandas 中,不确定更改的位置)会告诉您位置,但在这种情况下,它发生在 pandas 核心代码中:

/path/to/my/virtualenv/lib/python2.7/site-packages/pandas/core/indexing.py:426: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self.obj[item] = s

我需要查看整个回溯以找出最终触发此警告的 pandas 调用,因此我希望得到错误。

感谢您帮助找出如何查明此警告。

【问题讨论】:

【参考方案1】:

您需要指定它的精确位置:

import pandas as pd
import warnings
warnings.simplefilter("error", pd.core.common.SettingWithCopyWarning)

【讨论】:

谢谢;性能警告呢?当我尝试 warnings.simplefilter("error", pandas.core.common.PerformanceWarning) 我得到 AttributeError: 'module' object has no attribute 'PerformanceWarning'

以上是关于如何找出和访问 pandas 警告子类?的主要内容,如果未能解决你的问题,请参考以下文章

Python机器学习(九十五)Pandas 有条件访问

java子类中如何访问和修改父类成员

如何找出数据库用户访问了哪些表和存储过程?

子类如何访问父类

当列数事先未知时如何访问 Pandas 数据框列

如何避免 TypeScript 中出现虚假的“未使用参数”警告