加速Pandas字符串操作

Pandas字符串操作加速

本教程专注于加速字符串操作。

我感到无聊,决定对字符串操作方法进行基准测试,以及它们对pandas数据帧性能的影响。众所周知,一旦Pandas数据帧超过一定限制,它们会表现出奇怪的行为。这主要取决于内存压力,以及在一次操作多个行的元素时产生的一些开销。

所以,这是实验内容。

我使用Faker创建了一个数据帧。基础数据是10万行的虚假数据。

设置

!pip install faker

import pandas as pdimport numpy as npdef gen_data(x):  from faker import Faker  fake = Faker()  outdata = {}  for i in range(0,x):    outdata[i] = fake.profile()  return pd.DataFrame(outdata).Tn= 100000basedata = gen_data(n)

我通过将输出映射到Google Colab将其存储在Google Drive中

from google.colab import drivedrive.mount('/content/drive')

我创建了非常简单的函数来测试各种连接两个字符串的方法。

def process(a,b):  return ''.join([a,b])def process(a,b):  return a+bdef process(a,b):  return f"{a}{b}"def process(a,b):  return f"{a}{b}"*100

然后我决定创建一个空的数据帧,并编写一个函数将%%timeit的输出作为一行添加到数据帧中

# 使用%%timeit的输出将一行添加到数据帧中def add_to_df(n, m, x, outputdf):  outputdf.loc[len(outputdf.index)] = [m, n, x]# 输出数据帧outputdf = pd.DataFrame(columns=['method', 'n', 'timing'])outputdf

以下是运行每个函数并将数据导出到pandas数据帧的代码示例。

# 获取数据样本n = 10000suffix = 'fstring_100x'data = basedata.copy().sample(n).reset_index()

%%timeit -r 7 -n 1 -odata['newcol'] = ''for row in range(len(data)):  data.at[row ,'newcol'] = process(data.at[row, 'job'], data.at[row, 'company'])# 451 ms ± 34 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)# <TimeitResult : 451 ms ± 34 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>

m = "迭代每一行"add_to_df(n = n, m = m, x = vars(_), outputdf = outputdf)

实验