为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2023-09-26 14:47:31
我有一个缺少数据的数据集 - 大约 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 timedf = pandas.DataFrame([['Sam']], columns=['Name'])我创建一个数组然后进行连接:Time(ms) Taken to load : 3.886start_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.757start_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)]而不迭代一个范围?
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

可能我正在寻找类似的东西 - 它的运行速度快了 23 倍。但尚未在整个数据集上进行测试!


# Optimization 2: Try out using Numpy array :

start_time = time.time_ns()

start_time_s = time.time()


delta = 100

times = 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)


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 49 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信