python - pandas read_hdf 具有 'where' 条件限制?

标签 python pandas hdf5 pytables

我需要使用 where 子句查询具有 3 个条件的 HDF5 文件,其中一个条件是长度为 30 的列表:

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')

上面的查询给了我ValueError:太多输入并且错误是可重现的。

如果我将列表的长度减少到 29(三个条件):

myList = list(xrange(29))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')

OR 条件数量仅限两个(列表长度为 30):

然后它执行得很好:

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & time=timeString')

这是一个已知的限制吗? pandas 文档位于 http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.pytables.read_hdf.html没有提到这个限制,并且在搜索这个论坛后似乎还没有人遇到这个限制。

版本是pandas 0.15.2。如有任何帮助,我们将不胜感激。

最佳答案

已回答here

这是一个缺陷,因为 numpy/numexpr 无法处理树中超过 31 个操作数。 HDFStore 的 where 中类似 foo=[1,2,3,4] 的表达式会生成类似 (foo==1) | 的表达式。 (foo==2) .... 所以这些会被扩展,如果你有太多可能会失败。

HDFStore 使用单个操作数处理此问题(IOW,如果您只有 foo=[range(31)] 就可以了,但是因为您碰巧有一个嵌套的子操作- 子节点本身太长的表达式会出错。

通常,更好的方法是选择更大的范围(例如,可能是每个操作数的选择端点),然后执行内存中的 .isin。它甚至可能会更快,因为恕我直言,在选择较大范围时(即使您将更多数据存入内存),而不是单独选择时,HDF5 往往更高效。

关于python - pandas read_hdf 具有 'where' 条件限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28754265/

相关文章:

如果名称以 'xyz' 开头,python 删除文件

python - tkinter treeview - 拖放?

python - 如何在Python中将HDF5文件直接上传到S3存储桶

c++ - 如何使用C++ API在HDF5文件中写入/读取锯齿状阵列?

c++ - 如何智能地将多个参数写入一个hdf5文件?

python - 从另一个线程更新QLabel的内容时,GIF不会进行动画处理

python - 如何重复调用一个函数?

python - 识别数据框中连续出现的值

Python Pandas 计算每行的百分位数

python - 使用 pandas 在 CSV 文件中写入注释