我想使用正则表达式来抑制特定类型的警告。 警告信息是:
C:\Anaconda3\lib\site-packages\pandas\core\indexing.py:420: 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
我压制过滤器的方法:
import warnings
warnings.filterwarnings("ignore", message= ".*A value is trying to.*")
然而,它失败了。我确实尝试将警告消息的不同部分粘贴到正则表达式中但仍然失败。我想知道为什么。
答案 0 :(得分:1)
尝试仅提供以下代码(不显示消息)。可能是您提到的消息与警告不匹配。
导入警告 warnings.filterwarnings(“ ignore”)
答案 1 :(得分:0)
这是您遇到的错误吗?
AssertionError: message must be a string
warnings.filterwarnings
仅对message
参数使用字符串,而regex不会在此处编译。如果您确实想抑制此错误,请执行以下操作:
import pandas as pd
warnings.simplefilter("error", pd.core.common.SettingWithCopyWarning)
否则,您可能想要检查避免SettingWithCopyWarning的方法,因为许多其他人都遇到了相同的问题: How to deal with SettingWithCopyWarning in Pandas?
答案 2 :(得分:0)
您的正则表达式与the correct message string不匹配。
r".*A Value is trying to.*"
与"\nA value is trying to be.*"
不匹配,因为r"."
与除换行符以外的所有匹配。
有时,在不查看生成警告的模块的源代码的情况下,弄清楚实际消息字符串是什么可能很棘手。
答案 3 :(得分:0)
过滤器警告不是这样的。在文档中,您可以看到Omitted arguments default to a value that matches everything.
,还可以看到:message (default '') : is a string containing a regular expression that start of the warning message must match
。
这可以理解为使用操作“一次”将影响每个唯一文本消息显示一次。如果消息中有一个可能更改的字段(例如文件名),则警告将显示每个文件名一次。
如果设置了message参数,则每条匹配的唯一文本消息将被显示一次。
这是一个小例子:
import warnings
import random
warnings.filterwarnings("ignore", category=UserWarning)
warnings.warn("You won't see this warning")
message_formater = "this message with number {} will be displayed once"
# deactivating previously created filter
warnings.resetwarnings()
# applying new filter
warnings.filterwarnings("once", message_formater.format("(.*)"), category=UserWarning)
for i in range(100):
warnings.warn(message_formater.format(random.randint(0, 3)))
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:8: UserWarning: this message with number 0 will be displayed once
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:8: UserWarning: this message with number 3 will be displayed once
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:8: UserWarning: this message with number 1 will be displayed once
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:8: UserWarning: this message with number 2 will be displayed once