Pandas的矢量化版本Series.str.find

a6b3iqyw  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(99)

panda中的Series.str.find()函数似乎只取一个整数作为起始位置。我有一个包含字符串和起始位置数组的Series,我想从每个元素的相应位置开始找到给定子字符串的位置,如下所示:

a = pd.Series(data=['aaba', 'ababc', 'caaauuab'])
a.str.find('b', start=[0, 1, 2])  # returns a series of NaNs

我可以使用列表理解来实现这一点:

[s.find('b', pos) for s, pos in zip(a.values, [0, 1, 2])]

在numpy或panda中有没有一个函数可以直接快速地完成这个操作?还有,有没有一个函数也可以接受一个子字符串数组?

1tu0hz3e

1tu0hz3e1#

我认为这是一种更复杂的方法,因为您不必担心索引:

import pandas as pd

def find_from_index(series: pd.Series, to_find: str) -> pd.Series:
    return pd.Series([v.find(to_find, i) for i, v in enumerate(series)])

a = pd.Series(data=['aaba', 'ababc', 'cbaauuab'])
b = find_from_index(a, 'b')

希望这对你有帮助

jgwigjjp

jgwigjjp2#

不,没有,矢量化字符串操作是困难的。
你可以考虑convert your strings to arrays of characters,但是转换是一个限制性的步骤。一个快速测试告诉我,它所花费的时间与你的问题中提供的列表理解所花费的时间大致相同。而且我们还没有搜索位置。
简而言之,您当前的方法似乎是最有效的。

相关问题