猿问

通过生成缺失的顺序数据来提高膨胀数据的性能

我有一个缺少数据的数据集 - 大约 10,000 到 500,000 行。


1 2 3 13 14 15 18 26 ...

我需要填充中间的数据,以便后续处理是连续的。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

我测试了两种夸大数据的方法:


import time

df = pandas.DataFrame([['Sam']], columns=['Name'])

我创建一个数组然后进行连接:


Time(ms) Taken to load : 3.886


start_time = time.time_ns()


times = [ time for time in range (100)]

df2 = pandas.DataFrame(times, columns=['Nos'])

df['key'] = 'key'

df2['key'] = 'key'

df3 = df2.merge(df,on='key')


print('Time(µs) Taken to load :', (time.time_ns() - start_time)/1000)

使用数据框 - 合并单个记录:


Time(ms) Taken to load : 285.757


start_time = time.time_ns()


interim = pandas.DataFrame()

for idx, row in df.iterrows():

    for ts in range (100):

        row['Nos'] = ts

        interim = interim.append(row)


print('Time(µs) Taken to load :', (time.time_ns() - start_time)/1000)

显然,第一种方法的速度快了 95 倍。

  • 使用数据帧时是否有更快的方法来做到这一点?

  • 当生成数千个中间编号时,append速度会变慢。也许我可以将它保留在内存中直到达到一定大小,然后将其推过去。还有其他方法可以加快数据帧的速度吗?

  • 我可以在 Python 中使用类似于矩阵乘法的方法吗?该方法针对矢量处理进行了优化,以便我可以生成数组或列表中的所有其他重复字段。这是为了替换第一种方法中的连接,以便我可以将数据暂时保存在内存中。

[1(Row) x 1] [ 1 x 100 (Nos) ] = [ 1 x 100 (1 Row Repeated 100 times with this new Nos) ]
  • 有没有办法生成这个数组,[ time for time in range (100)]而不迭代一个范围?


烙印99
浏览 86回答 1
1回答

繁花不似锦

可能我正在寻找类似的东西 - 它的运行速度快了 23 倍。但尚未在整个数据集上进行测试!# Optimization 2: Try out using Numpy array :start_time = time.time_ns()start_time_s = time.time()delta = 100times = numpy.arange(start = start_time_s, stop =start_time_s + delta, step = 1)times= numpy.expand_dims(times,1)# print(times)base = numpy.array(['Sam', 'Dam', 'pam'])base= numpy.tile(base, (delta, 1))# print(base)result = numpy.concatenate((base, times), axis=1)print('Time(µs) Taken to load :', (time.time_ns() - start_time)/1000)print('Time(s) Taken to load :', time.time() - start_time_s)
随时随地看视频慕课网APP

相关分类

Python
我要回答