在 Pandas 中对字符串进行切片的有效方法

Efficient Way to Slice Strings in Pandas

我有一个包含超过 1 亿行的数据集,我正试图在 pandas 中对其进行操作。我正在尝试根据 bc 中的值分别作为起点和终点来分割 a 中的字符串。

我可以像这样使用列表理解来做到这一点:

df['d'] = [a[1]['a'][a[1]['b']:a[1]['c']] for a in df.iterrows()]

这真的很慢。我可以用这样的应用做同样的事情:

df['d'] = df.apply(lambda x: x['a'][x['b']:x['c']],axis=1)

这也很慢。我的问题是,使用 bc 中的值作为切片的开始和结束来切片 a 中的字符串的最有效方法是什么?

迭代 df.iterrows() 真的很慢,因为它为每一行创建一个单独的 pd.Series 对象。对于 1 亿行,这意味着正在创建(和丢弃)1 亿个此类对象。最好 zip 列并像这样在理解中使用它:

df.assign(d=[a[b:c] for a, b, c in zip(df['a'], df['b'], df['c'])])

这只会创建三个 Series 对象,然后迭代它们,从而节省大量开销。

您还可以查看 Numba 以编写自己的循环遍历数据框的函数。