Pandas read_hdf() returns "invalid variable reference" on valid where 条件
Pandas read_hdf() returns "invalid variable reference" on valid where condition
我正在尝试使用方法 read_hdb 的属性 where 将数据从大型 HDF 存储过滤到所需的子集:
phase = pd.read_hdf(DSPATH + '/phase-table.h5', 'phase', where='EXTSIDNAME=="A"')
根据文档,我可以使用基本逻辑条件指定数据集中定义的任何列。根据 Pandas documentation 语法 column_name == 'string literal' 被支持。
然而,对于我试图指定的任何列,该库抛出一个 ValueError 异常:
ValueError: The passed where expression: EXTSIDNAME=="A"
contains an invalid variable reference
all of the variable references must be a reference to
an axis (e.g. 'index' or 'columns'), or a data_column
The currently defined references are: index,columns
唯一没有通过错误的条件是'index=1'.
该列存在于数据存储中。如果我在没有过滤器的情况下加载它,我可以看到我正在尝试在确实存在的条件中指定:
Index(['EXTSIDNAME', 'HOSTNAME', 'TIMESTP', 'SUM_ENDDATE','MODULE_ID','MODULENAME',
'MODULE_STARTDATE', 'MODULE_ENDDATE', 'PHASE_ID','PHASENAME',
'PHASE_STARTDATE', 'PHASE_ENDDATE', 'ID', 'PhaseDuration'], dtype='object')
我正在使用 Anaconda 捆绑包中的最新稳定库。
如果您使用 to_hdf()
创建了 HDF 存储,则需要指定 data_columns
参数。发布了类似的问题 here。
一个例子:
d = {'Col': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'D'],
'X': [1, 2, 3, 4, 5, 6, 7, 8]}
df = pd.DataFrame.from_dict(d)
df
看起来像这样:
Col X
0 A 1
1 A 2
2 A 3
3 B 4
4 B 5
5 B 6
6 C 7
7 D 8
让我们用 to_hdf()
将它写入 .h5 文件。格式等于 'table'
:
很重要
df.to_hdf('myhdf.h5', 'somekey', format='table')
现在让我们用read_hdf()
阅读它:
pd.read_hdf('myhdf.h5', key='somekey', where='Col==A')
Returns 错误:
ValueError: The passed where expression: Col==A
contains an invalid variable reference
all of the variable refrences must be a reference to
an axis (e.g. 'index' or 'columns'), or a data_column
The currently defined references are: index,columns
什么给了?
当你做to_hdf()
时,你还需要像这样定义data_columns
:
df.to_hdf('myhdf.h5', 'somekey', format='table', data_columns=['Col', 'X'])
现在您可以使用 where
从 .h5 文件中读取数据:
pd.read_hdf('myhdf.h5', key='somekey', where='Col==A')
Col X
0 A 1
1 A 2
2 A 3
以where
为列表:
pd.read_hdf('myhdf.h5', key='somekey', where=['Col==A', 'X==2'])
Col X
1 A 2
我正在尝试使用方法 read_hdb 的属性 where 将数据从大型 HDF 存储过滤到所需的子集:
phase = pd.read_hdf(DSPATH + '/phase-table.h5', 'phase', where='EXTSIDNAME=="A"')
根据文档,我可以使用基本逻辑条件指定数据集中定义的任何列。根据 Pandas documentation 语法 column_name == 'string literal' 被支持。
然而,对于我试图指定的任何列,该库抛出一个 ValueError 异常:
ValueError: The passed where expression: EXTSIDNAME=="A"
contains an invalid variable reference
all of the variable references must be a reference to
an axis (e.g. 'index' or 'columns'), or a data_column
The currently defined references are: index,columns
唯一没有通过错误的条件是'index=1'.
该列存在于数据存储中。如果我在没有过滤器的情况下加载它,我可以看到我正在尝试在确实存在的条件中指定:
Index(['EXTSIDNAME', 'HOSTNAME', 'TIMESTP', 'SUM_ENDDATE','MODULE_ID','MODULENAME',
'MODULE_STARTDATE', 'MODULE_ENDDATE', 'PHASE_ID','PHASENAME',
'PHASE_STARTDATE', 'PHASE_ENDDATE', 'ID', 'PhaseDuration'], dtype='object')
我正在使用 Anaconda 捆绑包中的最新稳定库。
如果您使用 to_hdf()
创建了 HDF 存储,则需要指定 data_columns
参数。发布了类似的问题 here。
一个例子:
d = {'Col': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'D'],
'X': [1, 2, 3, 4, 5, 6, 7, 8]}
df = pd.DataFrame.from_dict(d)
df
看起来像这样:
Col X
0 A 1
1 A 2
2 A 3
3 B 4
4 B 5
5 B 6
6 C 7
7 D 8
让我们用 to_hdf()
将它写入 .h5 文件。格式等于 'table'
:
df.to_hdf('myhdf.h5', 'somekey', format='table')
现在让我们用read_hdf()
阅读它:
pd.read_hdf('myhdf.h5', key='somekey', where='Col==A')
Returns 错误:
ValueError: The passed where expression: Col==A
contains an invalid variable reference
all of the variable refrences must be a reference to
an axis (e.g. 'index' or 'columns'), or a data_column
The currently defined references are: index,columns
什么给了?
当你做to_hdf()
时,你还需要像这样定义data_columns
:
df.to_hdf('myhdf.h5', 'somekey', format='table', data_columns=['Col', 'X'])
现在您可以使用 where
从 .h5 文件中读取数据:
pd.read_hdf('myhdf.h5', key='somekey', where='Col==A')
Col X
0 A 1
1 A 2
2 A 3
以where
为列表:
pd.read_hdf('myhdf.h5', key='somekey', where=['Col==A', 'X==2'])
Col X
1 A 2