查找Pandas Series包含元素包含字符的位置的索引

时间:2018-02-15 10:33:05

标签: python string pandas contains series

示例:

import pandas as pd    
arr = pd.Series(['a',['a','b'],'c'])

我想得到系列包含'a'元素的索引。所以我想找回索引01

我试过写

arr.str.contains('a')

但是会返回

0     True
1      NaN
2    False
dtype: object

虽然我希望它返回

0     True
1     True
2    False
dtype: object

2 个答案:

答案 0 :(得分:5)

使用Series.str.join()将单元格中的列表/数组连接成一个字符串,然后使用.str.contains('a')

In [78]: arr.str.join(sep='~').str.contains('a')
Out[78]:
0     True
1     True
2    False
dtype: bool

答案 1 :(得分:2)

使用适用于列表和字符串的Series.apply和Python in关键字

arr.apply(lambda x: 'a' in x)

如果您的Series中没有任何NaN值,这将正常工作,但如果您这样做,则可以使用:

arr.apply(lambda x: 'a' in x if x is not np.nan else x)

这比使用Series.str要快得多。

基准:

%%timeit
arr.str.join(sep='~').str.contains('a')

需要:249 µs ± 4.83 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
arr.apply(lambda x: 'a' in x)

需要:70.1 µs ± 1.68 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%%timeit
arr.apply(lambda x: 'a' in x if x is not np.nan else x)

需要:69 µs ± 1.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)