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')