【问题标题】:Python pandas Reading specific values from HDF5 files using read_hdf and HDFStore.selectPython pandas 使用 read_hdf 和 HDFStore.select 从 HDF5 文件中读取特定值
【发布时间】:2014-12-05 19:17:36
【问题描述】:

所以我用一个看起来像这样的简单数据集创建了 hdf5 文件

>>> pd.read_hdf('STORAGE2.h5', 'table')
   A  B
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4

使用这个脚本

import pandas as pd
import scipy as sp
from pandas.io.pytables import Term

store = pd.HDFStore('STORAGE2.h5')

df_tl = pd.DataFrame(dict(A=list(range(5)), B=list(range(5))))

df_tl.to_hdf('STORAGE2.h5','table',append=True)

我知道我可以使用

x = pd.read_hdf('STORAGE2.h5', 'table',  columns=['A'])

x = store.select('table', where = 'columns=A')

如何选择列“A”中等于 3 的所有值或特定值或列“A”中带有字符串的索引,例如“foo”?在 pandas 数据框中,我会使用 df[df["A"]==3]df[df["A"]=='foo']

如果我使用read_hdf()store.select(),效率也会有所不同吗?

【问题讨论】:

标签: python pandas hdf5


【解决方案1】:

您需要指定data_columns=(您也可以使用True 使所有列都可搜索)

(仅供参考,mode='w' 将重新启动文件,仅用于我的示例)

In [50]: df_tl.to_hdf('STORAGE2.h5','table',append=True,mode='w',data_columns=['A'])

In [51]: pd.read_hdf('STORAGE2.h5','table',where='A>2')
Out[51]: 
   A  B
3  3  3
4  4  4

【讨论】:

  • 我明白了,如果我在使用to_hdf 存储它时不附加数据列,那么如果我使用store['table2'] = df_tl 也将不起作用。我很惊讶熊猫不会自动化data_columns=True
  • 我猜我不能使用store['table2'] = df_tl,除非我想读取整个表格并在内存中进行编辑。
  • 正确,它以“固定”格式存储。这取决于你的目标。如果您需要追加/查询,或者有大量数据,请使用“表”。也就是说,“固定”对于读/写来说更快,所以对于一个不是很大的集合来说它工作得很好。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2016-02-11
  • 2017-11-26
相关资源
最近更新 更多