如何在pandas系列索引中过滤字符串

8 投票
1 回答
8903 浏览
提问于 2025-04-18 16:44

我正在尝试通过对一个包含字符串的索引使用布尔表达式来过滤一个pandas系列。比如,在下面的代码中,我想通过过滤另一个系列(S)来创建一个新的系列(Sman),这个过滤是针对索引中包含子字符串'man'的行。

from pandas import Series
S = Series({'moondog':12,'catman':23, 'batman':31, 'catdog':42})
Sman = S['man' in S]

但是,Sman的结果只是数字31,而不是我希望得到的包含'catman'和'batman'行的新系列。

我哪里做错了呢??

1 个回答

11

你可以使用 filter 这个方法:

In [11]: S.filter(like='man')
Out[11]:
batman    31
catman    23
dtype: int64

另外一种手动的方法是:

In [12]: S[['man' in i for i in S.index]]
Out[12]:
batman    31
catman    23
dtype: int64

你之前的方法没有成功的原因是 'man' in S 这个表达式返回了 False,因为它是在检查索引中是否有完全匹配的标签 'man'(实际上并没有)。

撰写回答