我有一个DataFrame,我想过滤掉#34;糟糕的数据"用正则表达式。在我的用例中,column_b
中任何一行中包含4个相同数字的数字都被视为" bad"。
这是我的代码:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN],
'B' : [1111111,1234567,2222,55555,0,0,np.NaN,9,0,0],
'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
print(df1)
bad_data = df1[df1['B'].astype(str).str.contains(r'(\d)\1{3,}')]
print(bad_data)
A B E
0 NaN 1111111.0 Assign
2 3.0 2222.0 Assign
3 4.0 55555.0 Ugly
我的代码有效。但我得到了这个用户警告:UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
这是关于here的讨论。在该示例之后。我将我的正则表达式更改为使用非捕获组(?...)
:
bad_data = df1[df1['B'].astype(str).str.contains(r'(?:(\d))\1{3,}')]
但我仍然接受了用户警告。无论我尝试在哪里或有多少非限制营养组。我可以过滤掉其他链接中的警告。但是,我做错了什么/可能会做得更好,以防止警告弹出