Pandas read_hdf: 使用 chunksize 或 iterator 时如何获取列名?

Pandas read_hdf: how to get column names when using chunksize or iterator?

我正在使用 pandas.read_hdf 阅读大型 (~10 GB) hdf5 table。我正在使用 iterator=True 以便我可以一次访问块(例如,一次 chunksize=100000 行)。

如何获取所有列名的列表或 'keys'?

此外,为什么没有类似于 pandas.read_table 的 get_chunk 方法?直接迭代块是唯一的方法吗("for chunk in data: "),你不能随意访问不同编号的块("data[300]")?

编辑:

看起来我可以使用在访问第一个块后中断的循环来访问列名:

for i,v in enumerate(data):
if i != 0:
    break
colnames = v.columns

但是我的第二个问题仍然存在:是否没有办法访问 pandas TextFileReader 迭代器上的每个单独的块(例如,模仿 read_table 的 get_chunk 方法,或者使用类似 dict 的查找,data[0]),而不是执行上述怪异的循环单次迭代?

您是否尝试过将 HDF5 文件加载为 HDFStore?这将允许你使用 HDFStore.select 方法,它可以做你想做的事(寻找等)。您也可以使用 select 仅对列的子集进行操作。对我来说,它看起来比 read_hdf 函数提供了更多的灵活性。只要您了解 HDF5 文件的结构,以下内容可能会有所帮助:

store = pd.HDFStore('/path/to/file', 'r')
colnames = store.select('table_key', stop=1).columns

# iterate over table chunks
chunksize = 100000
chunks = store.select('table_key', chunksize=chunksize)
for chunk in chunks:
    ...code...

# select 1 specific chunk as iterator
chunksize = 100000
start, stop = 300*chunksize, 301*chunksize
this_chunk = store.select('table_key', start=start, stop=stop, iterator=True)
do_work(this_chunk)

store.close()

请注意,您还可以打开 HDFStore 作为上下文管理器,例如,

with pd.HDFStore('/path/to/file', 'r') as store:
    ...code...