【发布时间】:2013-10-14 17:01:13
【问题描述】:
我有一个 hdf5 数据库,这给我带来了一些麻烦。
它应该包含 3,000 个表,其中 6 列(整数和浮点数)加上一个索引(日期)和可变数量的行(从 100 到 10,000,000)。
从昨天开始,当我使用 ViTables '查看'数据库时,我错过了数千个表。我曾经能够在 ViTables 中看到它们。但是数据仍然存在:我仍然可以通过 Pandas 访问它们。
数据整理如下:type/source/id
例如,我可以使用以下方法同时检索 id1 和 id2:
with pd.get_store(HDF_DATABASE) as store:
print store['type1/source1/id1']
print store['type2/source2/id2']
但在 ViTables 中,我看不到 type2/source2/id2。
此外,> print store 将列出type1/source1/id1,但不会列出type2/source2/id2。
关于如何修复这些“不可见”数据表的任何建议?
编辑:
- 错别字
- Windows 7 32bit / Python 2.7.5 / Pandas 0.12.0(和其他 过去的版本)
- ptdump 文件:http://pastebin.com/7mB6bT2T
- 正如预期的那样,我混淆了类型源 ID
- 看起来数据不再被引用,但只要数据库不是 ptrepack-ed 就仍然存在。
EDIT2:
- 我完全丢失了原始数据库:我无法再访问它。该格式不再被识别。
- 用于插入新数据的此语句(和其他类似语句)返回
NaturalNameWarning警告:store.append('equity/bloomberg/4615238QCN_Equity', df)。它不尊重生成警告的自然命名要求。这可能与遇到的问题有关。
【问题讨论】:
-
什么版本的熊猫?你昨天对文件做了什么吗?你能显示
ptdump -av <filename>并显示 id1 和 id2 的部分吗(你可能需要重定向,因为它会显示所有节点上的数据) -
@Jeff 我使用
Pandas 0.12.0,但我过去使用过其他版本(如您在 ptdump 文件中所见)。请找到转储here 的链接。如您所见,没有提及 source2 和 id2,尽管store['type2/source2/id2']仍然可以正常工作。 -
您可以发布指向您文件的链接吗?您可以尝试
ptrepack in.h5 out.h5看看新输出中是否仍然存在问题。 -
有了
ptrepack in.h5 out.h5,我无法再访问store['type2/source2/id2']。out.h5的大小大约是in.h5大小的一半。文件原始文件为 250GB,无法共享(我购买了数据,但无法分发)。另外,如果我删除大部分数据并将其 ptrepack 以便我可以在线共享,那么问题就不会再明显了。 -
好的......就像在一个 HDF5 文件中存储这么多表通常不是一个好主意一样。您是否正在尝试同时编写此内容?您可能已超出元数据限制和/或以某种方式重写了组。你在桌子上做什么操作?