gpt4 book ai didi

python - 从 pandas.HDFStore 表中选择列

转载 作者:IT老高 更新时间:2023-10-28 21:11:34 24 4
gpt4 key购买 nike

如何从 pandas HDFStore 中检索特定列?我经常处理非常大的数据集,这些数据集太大而无法在内存中进行操作。我想迭代地读取 csv 文件,将每个 block 附加到 HDFStore 对象中,然后处理数据的子集。我已经阅读了一个简单的 csv 文件并将其加载到 HDFStore 中,代码如下:

tmp = pd.HDFStore('test.h5')
chunker = pd.read_csv('cars.csv', iterator=True, chunksize=10, names=['make','model','drop'])
tmp.append('df', pd.concat([chunk for chunk in chunker], ignore_index=True))

还有输出:

In [97]: tmp
Out[97]:
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df frame_table (typ->appendable,nrows->1930,indexers->[index])

我的问题是如何从 tmp['df'] 访问特定列?该文档提到了 select() 方法和一些 Term 对象。提供的示例适用于面板数据;但是,我太新手了,无法将其扩展到更简单的数据框案例。我的猜测是我必须以某种方式创建列的索引。谢谢!

最佳答案

HDFStore 记录表的方式,列按类型存储为单个 numpy 数组。您总是可以取回所有列,您可以对其进行过滤,因此您会根据您的要求返回。在 0.10.0 中,您可以传递包含列的 Term。

store.select('df', [ Term('index', '>', Timestamp('20010105')), 
Term('columns', '=', ['A','B']) ])

或者你可以在之后重新索引

df = store.select('df', [ Term('index', '>', Timestamp('20010105') ])
df.reindex(columns = ['A','B'])

axes 并不是真正的解决方案(您实际创建的实际上是存储转置帧)。此参数允许您重新排序轴的存储,以便以不同的方式启用数据对齐。对于数据框来说,它真的没有多大意义。对于 3d 或 4d 结构,磁盘数据对齐对于真正快速的查询至关重要。

0.10.1 将允许一个更优雅的解决方案,即数据列,也就是说,您可以选择某些列来表示为表存储中有自己的列,因此您真的可以只选择它们。这是即将到来的味道。

 store.append('df', columns = ['A','B','C'])
store.select('df', [ 'A > 0', Term('index', '>', Timestamp(2000105)) ])

解决此问题的另一种方法是将单独的表存储在文件的不同节点中,然后您可以只选择您需要的。

总的来说,我再次推荐非常宽的 table 。 hayden 提供了 Panel 解决方案,这可能对您现在有好处,因为实际的数据排列应该反射(reflect)您希望如何查询数据。

关于python - 从 pandas.HDFStore 表中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com