如何解决过滤熊猫中的行
我需要找到具有以下条件的普通用户
- CODE中的模式AA;
- CODE中的模式
__
; - CODE中的数字;
数据集如下:
User_ID CODE
A12 AAada __fa
F453 21 ads
J43 Has AA
... ...
H21 MNasdf
L32 sad 21
M54 43__12 asd
... ...
我应该做的是
- 首先找到在CODE中具有AA的所有用户ID,即A12和J43;
- 找到所有在CODE中拥有
__
的用户,即A12和M54; - 查找所有在CODE中具有数字的用户,即F453,L32和M54。
我尝试使用正则表达式过滤用户,如果有数字(也可以使用^[^0-9]*$
,则使用df.CODE.str.contains('^\d+\'
,如果是/[$-/:-?{-~!"^_[]]/
,则过滤器使用__
。
解决方法
您可以将|
(或)与str.contains()
和|
结合使用,以分隔三种模式:
df = df[df['CODE'].str.contains('\d|__|AA')]
Out[3]:
User_ID CODE
0 A12 AAada __fa
1 F453 21 ads
2 J43 Has AA
5 L32 sad 21
6 M54 43__12 asd
,
您可以将字符串访问器用于系列series.str.contains()
。这是user guide
以及解决方案的代码
pats = ['AA','__','\d']
mask = {}
for pat in pats:
mask[pat] = df.CODE.str.contains(pat,regex=True)
# regex=True is default,shown here for demonstration
print()
print(mask[pat])
输出
0 True
1 False
2 True
3 False
4 False
5 False
Name: CODE,dtype: bool
0 True
1 False
2 False
3 False
4 False
5 True
Name: CODE,dtype: bool
0 False
1 True
2 False
3 False
4 True
5 True
Name: CODE,dtype: bool
稍后可以使用这些掩码中的每一个来过滤数据帧。在这种情况下,最好将它们保留为单独的遮罩,因为它们似乎有重叠。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。