我有一个缺少数据的数据集 - 大约 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)]
而不迭代一个范围?
繁花不似锦
相关分类