2015-08-13 41 views
0

我现在有一个运行针对数据库的大型SQL查询,并返回一个数据框大熊猫的结果和图表值的脚本。我目前使用pickle存储该数据帧,以便对其进行缓存以快速重新运行和调试代码。建议如何存储号码熊猫数据帧缓存

我现在必须开发它来运行20个查询并输出20个图。对于如何存储20个数据帧,从结果缓存的角度进行调试,有没有什么好的建议?

回答

3

pickle绝对是一个很好的路要走。如果你比较不同方法的性能和文件大小,你会看到pickle是很确定(在IPython使用%timeit):

import pandas as pd 
from sqlalchemy import create_engine 

engine = create_engine('sqlite:////home/user/testdb.db') 
ts = pd.Series(np.random.randn(1000000), index=range(1000000)) 

# pickle, file size 23 MB 
%timeit ts.to_pickle('p.test') 
1 loops, best of 3: 279 ms per loop 

# sql via sqllite, file size 33 MB 
%timeit ts.to_sql('ts1', engine, if_exists='replace') 
1 loops, best of 3: 11.9 s per loop 

# json, file size 22 MB 
%timeit ts.to_json('p.json') 
1 loops, best of 3: 261 ms per loop 

sqlite开销使得它很慢,只是用于缓存你赢了没有好处(特别是如果你的数据在另一个SQL数据库中)。

你实际上可能会考虑你的目的测试json,它具有大致相同的速度为pickle,但你可以阅读其他程序(与d3例如绘制)的json编辑数据。