【发布时间】:2016-12-01 23:17:37
【问题描述】:
我有一个 python pandas 系列字典:
id dicts
1 {'5': 1, '8': 20, '1800': 2}
2 {'2': 2, '8': 1, '1000': 25, '1651': 1}
... ...
... ...
... ...
20000000 {'2': 1, '10': 20}
字典中的(key, value)表示('feature', count)。存在大约 2000 个独特的功能。
该系列在 pandas 中的内存使用量约为 500MB。 将此对象写入磁盘的最佳方法是什么(理想情况下磁盘空间使用率低,并且写入速度快,之后读取速度快)?
考虑的选项(并尝试了前 2 个):
- to_csv(但将字典视为字符串,因此之后转换回字典非常慢)
- cPickle(但在执行期间内存不足)
- 转换为 scipy 稀疏矩阵结构
【问题讨论】:
-
关于磁盘空间,
to_csv()确实有一个压缩参数,例如,to_csv(..., compression = 'gzip')。更一般地说,您可能想要查看的工具是Blaze。您可以将 pandas 数据结构转换为 blaze ds 并使用 blaze 的 pandas-like API 对其进行操作。主要优点是 blaze 不会像 pandas 那样将所有数据加载到内存中。 -
如果您在
Series上使用to_pickle方法,您是否仍然会耗尽内存?一般来说,在pandas中将字典存储在行中并不是很好 - 将它们保存在内置列表中基本上没有什么不同 - 这似乎是某种稀疏数组的情况? -
@InNoam csv 的问题是之后恢复字典(使用 eval())很慢并且在我的情况下内存不足。将调查 Blaze!
-
为什么要将字典放在一个系列中?
-
@Darn。那么使用稀疏结构可能会更好。
标签: python pandas dictionary scipy sparse-matrix