问题:
我可以忽略或阻止使用SettingWithCopyWarning
将warnings.simplefilter()
打印到控制台吗?
详细信息:
我正在使用熊猫运行一些数据清理例程,并且使用batch file以最简单的方式执行这些例程。我的Python脚本中的其中一行触发SettingWithCopyWarning
并被打印到控制台。但是它也在命令提示符中回显:
除了整理source of the error之外,还有什么方法可以像使用warnings.simplefilter(action = "ignore", category = FutureWarning)
这样的FutureWarnings一样防止错误消息被打印到提示上吗?
答案 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 时,可以对帧进行切片/索引以返回视图或副本。 “视图”是原始数据的视图,因此修改视图可能会修改原始数据。而“副本”是对原始数据的复制,对副本所做的任何更改都不会影响原始数据,对原始数据所做的任何更改都不会影响副本。