Python 熊猫阅读带有'的hdf;其中';条件限制?

Python 熊猫阅读带有'的hdf;其中';条件限制?,python,pandas,hdf5,pytables,Python,Pandas,Hdf5,Pytables,我需要查询带有where子句的HDF5文件,其中有3个条件,其中一个条件是长度为30的列表: myList = list(xrange(30)) h5DF = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString') 上面的查询给出了ValueError:输入太多,错误是可再现的 如果我将列表长度减少到29(三个条件): 或条件数仅为两个(列表长度为30)

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

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')
上面的查询给出了
ValueError:输入太多
,错误是可再现的

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

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

然后它执行得很好:

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & time=timeString')
这是已知的限制吗?pandas的文档没有提到这个限制,在搜索这个论坛之后,似乎还没有人遇到这个限制

版本为
0.15.2
。非常感谢您的帮助。

此问题已得到解答

这是一个缺陷,
numpy/numexpr
无法处理树中超过31个操作数。在
HDFStore
的where中,像
foo=[1,2,3,4]
这样的表达式会生成像
(foo==1)|(foo==2)…
这样的表达式,因此这些表达式会展开,如果太多,则可能会失败

HDFStore
使用单个操作数处理此操作(如果您只有
foo=[range(31)],则为低)
是可以的,但由于您碰巧有一个嵌套的子表达式,其中子节点本身太长,因此会出现错误

通常,更好的方法是选择更大的范围(例如,可能是每个操作数选择的终点),然后在内存中执行
.isin
。它甚至可能更快,因为HDF5在选择更大范围时往往效率更高(即使您将更多数据带到内存中),而不是个人选择

myList = list(xrange(30))

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