Pandas HDFStore使用where参数报错原因及规避方法
问题分析与解决
错误原因
你的代码里存在一个拼写错误:调用store.put时,参数名写成了foramt='table',正确的参数名是format。因为参数名不匹配,pandas无法识别你要指定Table格式存储,所以默认使用了Fixed格式保存obj2。
而Fixed格式的HDFStore有个限制:它不支持where这类条件筛选参数,只能完整读取整个数据集,所以当你用store.select加where条件时,就触发了TypeError。
解决方法
1. 修正参数拼写
把foramt改成format,让数据以Table格式存储,这样就能支持条件查询了:
import pandas as pd import numpy as np frame = pd.DataFrame({'a': np.random.randn(100)}) store = pd.HDFStore('mydata.h5') store['obj1'] = frame store['obj1_col'] = frame['a'] # 修正拼写错误 store.put('obj2', frame, format='table') # 现在可以正常使用where条件筛选 result = store.select('obj2', where=['index >= 10 and index <= 15']) print(result) store.close()
2. 区分两种HDF存储格式,避免同类错误
后续使用HDFStore时,要清楚两种存储格式的适用场景:
- Fixed格式:默认存储格式,读写速度快、占用空间小,但只能完整读取数据,不支持任何条件筛选、数据追加操作。适合存储不需要后续筛选的静态数据集。
- Table格式:支持
where条件筛选、指定列读取、数据追加,但存储体积略大、读写速度稍慢。适合需要做查询或动态追加数据的场景。
如果要使用Table格式,必须显式指定format='table'参数(不管是用store.put还是store.append方法),不要依赖默认行为。
内容的提问来源于stack exchange,提问作者Hatem Abdeen
相关产品推荐
相关产品推荐

