过滤 Pandas 数据帧的行

3

我有一个数据框,包含一个名为numbers的列。该列数据是由逗号分隔的数字字符串。

numbers
-------
1,3,4,5,17,30
5,6,18,37,41,42
1,2,5,14,19,20
1,5,13,20,29,31
1,9,10,11,14,17
2,9,13,25,30,35

如何获取所有包含数字15的字符串?

期望的输出:

numbers
-------
1,3,4,5,17,30
1,2,5,14,19,20
1,5,13,20,29,31

1
你想要的输出是什么? - jezrael
1个回答

3

您可以使用split创建df,然后使用eqany进行比较。最后通过boolean indexing进行过滤:

df1 = df['numbers'].str.split(',', expand=True).astype(int)
df = df[df1.eq(1).any(1) & df1.eq(5).any(1)]
print (df)
           numbers
0    1,3,4,5,17,30
2   1,2,5,14,19,20
3  1,5,13,20,29,31

使用contains方法进行条件筛选的另一种解决方案:

a = df['numbers'].str.contains(',1,|,1$|^1,')
b = df['numbers'].str.contains(',5,|,5$|^5,')

df = df[a & b]
print (df)
           numbers
0    1,3,4,5,17,30
2   1,2,5,14,19,20
3  1,5,13,20,29,31

我们可以使用 contains 函数来使用一个正则表达式过滤数据吗? - HmH
1
如果需要 15,那么是的。但如果需要 15,我认为不行。 - jezrael
我想表达的是,我们能否编写一个正则表达式,过滤掉所有同时包含1和5的字符串。 - HmH
df1.eq(1).any(1) & df1.eq(5).any(1) 可以被替换为 df1.isin([1,5]).any(1),是吗? - IanS
@IanS - 我认为不是这样的,因为isin是1或5。所以会得到不同的输出。 - jezrael
1
@HmH - 我认为在正则表达式中同时检查两个条件是不可能的,因为需要使用 AND 而不是 OR参考链接 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接