如何使用warnings.simplefilter()忽略SettingWithCopyWarning?

时间:2019-01-15 11:21:40

标签: python pandas warnings suppress-warnings

问题:

我可以忽略或阻止使用SettingWithCopyWarningwarnings.simplefilter()打印到控制台吗?

详细信息:

我正在使用熊猫运行一些数据清理例程,并且使用batch file以最简单的方式执行这些例程。我的Python脚本中的其中一行触发SettingWithCopyWarning并被打印到控制台。但是它也在命令提示符中回显:

enter image description here

除了整理source of the error之外,还有什么方法可以像使用warnings.simplefilter(action = "ignore", category = FutureWarning)这样的FutureWarnings一样防止错误消息被打印到提示上吗?

3 个答案:

答案 0 :(得分:2)

尽管我强烈建议您解决此问题,但可以通过从pandas.core.common导入警告来抑制警告。我找到了它在GitHub上的位置。

示例:

import warnings

import pandas as pd
from pandas.core.common import SettingWithCopyWarning

warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)

df = pd.DataFrame(dict(A=[1, 2, 3], B=[2, 3, 4]))
df[df['A'] > 2]['B'] = 5  # No warnings for the chained assignment!

答案 1 :(得分:1)

您还可以使用:

pd.set_option('mode.chained_assignment',None)
# This code will not complain!
pd.reset_option("mode.chained_assignment")

或者,如果您愿意在上下文中使用它:

with pd.option_context('mode.chained_assignment',None)):
    # This code will not complain!

答案 2 :(得分:0)

首先您应该明白 SettingWithCopyWarning 是警告,而不是错误。您可以通过以下分配安全地禁用此警告。

pd.options.mode.chained_assignment = None

警告背后的真正问题是通常很难预测返回的是视图还是副本。在过滤 Pandas DataFrames 时,可以对帧进行切片/索引以返回视图或副本。 “视图”是原始数据的视图,因此修改视图可能会修改原始数据。而“副本”是对原始数据的复制,对副本所做的任何更改都不会影响原始数据,对原始数据所做的任何更改都不会影响副本。