Pandas阅读“哪里”条件限制?

2024-10-01 13:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

myList = list(xrange(30))

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

上面的查询给出了ValueError: too many inputs,错误是可重复的。在

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

^{pr2}$

条件数只能为两个(列表长度为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。感谢任何帮助。在


Tags: pandasdf列表readindextimewhere条件
1条回答
网友
1楼 · 发布于 2024-10-01 13:41:30

答案是here

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

HDFStore用一个操作数来处理这个问题(如果你只有foo=[range(31)]就可以了,但是因为你碰巧有一个嵌套的子表达式,其中的子节点本身太长,所以会出错。在

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

相关问题 更多 >