关于如何存储多个 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 大致相同,但您可以使用其他程序读取 jsoned 数据(用d3 例如)。