在熊猫中切线的有效方法

时间:2019-10-23 21:28:10

标签: python pandas dataframe text-processing

我有一个数据集,其中有超过1亿行我正试图在熊猫中操作。我试图根据ab中的值分别将c中的字符串作为起点和终点。

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)

这也相当慢。我的问题是,使用ab中的值作为切片的开始和结束,对c中的字符串进行切片的最有效方法是什么?

1 个答案:

答案 0 :(得分:3)

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来编写自己的遍历数据帧的函数。