我有以下数据框。
In [12]: dfFinal
Out[12]:
module vectime vecvalue
1906 client1.tcp [1.1007512, 1.1015024, 1.1022536, 1.1030048, 1... [0.0007512, 0.0007512, 0.0007512, 0.0007512, 0...
1912 client2.tcp [1.10079784, 1.10159568, 1.10239352, 1.1031913... [0.00079784, 0.00079784, 0.00079784, 0.0007978...
1918 client3.tcp [1.10084448, 1.10168896, 1.10258008, 1.1036111... [0.00084448, 0.00084448, 0.00089112, 0.0010310...
我想绘制每个模块的时间序列vecvalue
与vectime
。
为此,我可以执行以下操作:
1)Matplotlib
start = datetime.datetime.now()
for row in dfFinal.itertuples():
t = row.vectime
x = row.vecvalue
x = runningAvg(x)
plot(t,x)
total = (datetime.datetime.now() - start).total_seconds()
print("Total time: ",total)
这样做需要0.07005
秒才能完成。
2)Seaborn
start = datetime.datetime.now()
for row in dfFinal.itertuples():
t = row.vectime
x = row.vecvalue
x = runningAvg(x)
DF = pd.DataFrame({'x':x, 't':t})
sns.lineplot(x='t', y='x', data=DF)
total = (datetime.datetime.now() - start).total_seconds()
print("Total time: ",total)
这样做需要19.157463
秒才能完成。
为什么会有如此大的差异?我做错了什么事情,导致处理一个相当小的DF需要这么长时间?
答案 0 :(得分:3)
在对ci=None
的通话中设置lineplot
;否则,将计算置信区间,从而导致一些昂贵(且不必要)的df.groupby
通话。
顺便说一句:snakeviz
模块是快速查找计算瓶颈的好工具。