Pandas切丝的有效方法

2024-03-29 09:53:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,有超过1亿行,我正试图在熊猫操作。我试图根据bc中分别作为起点和终点的值来分割a中的字符串。你知道吗

enter image description here

我可以用列表理解这样做:

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中的字符串进行切片的最有效方法是什么?你知道吗


Tags: 数据方法lambda字符串indf列表for
1条回答
网友
1楼 · 发布于 2024-03-29 09:53:21

迭代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,编写自己的函数,在数据帧上循环。你知道吗

相关问题 更多 >