在使用str.findall时获取熊猫系列的索引

时间:2020-06-10 21:17:56

标签: python pandas

我正在寻找包含特定字符串的行。数据集有近一百万行。这是一个简单的例子;

text=['abc USER@xxx.com 123 any@www foo @ bar 78@ppp @5555 aa@111www','anontalk.com']
text=pd.Series(text)
srhc=text.str.findall('www')
srhc

输出是;

0    [www, www]
1    []        
dtype: object

是否有可能有效地(即以编程方式)获取包含文本www的索引列表。感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

我们可以用strcontains nonzero

srhc=text.str.contains('www').to_numpy().nonzero()[0]
srhc
Out[66]: array([0], dtype=int64)

答案 1 :(得分:1)

您可以使用text.index过滤str.contains()

srhc = text.index[text.str.contains('www')]
print(srhc)

打印:

Int64Index([0], dtype='int64')

答案 2 :(得分:0)

要搜索特定的子字符串,请使用.str.contains();

text = ['abc USER@xxx.com', 'helowww', '123 any@www', 'foo www', '@5555 aa@111www', 'anontalk.com']

text = pd.Series(text)

text[text.str.contains('www')]

输出;

1            helowww
2        123 any@www
3            foo www
4    @5555 aa@111www
dtype: object

获取这些索引;

text[text.str.contains('www')].index.to_list()

# or this 
text.index[text.str.contains('www')]

输出;

[1, 2, 3, 4]

答案 3 :(得分:0)

我认为进行列表理解来获取索引会更有效,特别是因为该系列的索引没有唯一或特殊之处

text=['abc USER@xxx.com 123 any@www foo @ bar 78@ppp @5555 aa@111www','anontalk.com']

#I use this to stay true to your question
text=pd.Series(text)

#this gets you the index/indices
#which is what you want, based on your question
[index for index, entry in enumerate(text) if 'www' in entry]

[0]