关于如何存储多个 pandas 数据帧以进行缓存的建议
Suggestions for how to store a number of pandas data frames for caching
我目前有一个脚本 运行 对数据库进行大型 SQL 查询,returns 结果在 pandas 数据框中并绘制值图表。我目前使用 pickle
存储该数据帧,以便缓存它以便快速重新 运行 和调试代码。
我现在必须将其开发到 运行 大约 20 个查询并输出 20 个图表。从结果缓存的角度进行调试,对于如何存储 20 个数据帧有什么好的建议吗?
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
大致相同,但您可以使用其他程序读取 json
ed 数据(用d3
例如)。
我目前有一个脚本 运行 对数据库进行大型 SQL 查询,returns 结果在 pandas 数据框中并绘制值图表。我目前使用 pickle
存储该数据帧,以便缓存它以便快速重新 运行 和调试代码。
我现在必须将其开发到 运行 大约 20 个查询并输出 20 个图表。从结果缓存的角度进行调试,对于如何存储 20 个数据帧有什么好的建议吗?
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
大致相同,但您可以使用其他程序读取 json
ed 数据(用d3
例如)。