示例:
import pandas as pd
arr = pd.Series(['a',['a','b'],'c'])
我想得到系列包含'a'
元素的索引。所以我想找回索引0
和1
。
我试过写
arr.str.contains('a')
但是会返回
0 True
1 NaN
2 False
dtype: object
虽然我希望它返回
0 True
1 True
2 False
dtype: object
答案 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)