如何从pandas HDFStore检索特定列?我经常处理非常大的数据集,这些数据集太大,无法在内存中操作。我想迭代地读取csv文件,将每个块追加到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中,可以传递包含列的术语。
或者你可以事后重新编制索引
这里的
axes
并不是真正的解决方案(实际上您创建的是存储转置帧)。此参数允许您重新排列轴的存储顺序,以便以不同的方式启用数据对齐。对于数据帧来说,这并不意味着什么;对于3d或4d结构,磁盘上的数据对齐对于真正快速的查询是至关重要的。0.10.1将允许一个更优雅的解决方案,即数据列,也就是说,您可以选择某些列来表示为表存储中有自己的列,这样您就可以只选择它们。这是一个什么来品尝。
另一种方法是将单独的表存储在文件的不同节点中,然后只能选择所需的内容。
总的来说,我再次推荐非常宽的桌子。hayden提供了Panel解决方案,这对您现在可能是一个好处,因为实际的数据排列应该反映您希望如何查询数据。
从现在起,您可以使用查询表达式代替
Term
构造。 e、 g:store.select('df', "index > Timestamp('20000105')")
您可以使用列的索引存储dataframe,如下所示:
然后根据您的希望选择:
其中:
是的。
对我来说,这不是一个理想的解决方案,因为我们只能通过一件事来索引数据帧!令人担忧的是,the docs似乎建议您可以只通过一件事索引一个数据帧,至少使用
axes
:我可能读错了,希望有人能证明我错了!
是的。
注意:我发现用两种方法(索引和列)索引数据帧的一种方法是将其转换为一个面板,然后面板可以使用两个索引进行检索。但是,每次检索项目时,我们都必须将选定的子面板转换为数据帧。。。再说一次,不太理想。
相关问题 更多 >
编程相关推荐