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

时间:2017-12-28 00:57:16

标签: python pandas numpy hdf5 chunking

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

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

另外,为什么没有类似于pandas.read_table的get_chunk方法?是直接迭代块的唯一方式("对于数据中的块:"),并且您无法随意访问不同的编号块(" data [300]&#34 ;)?

编辑:

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

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

但是我的第二个问题仍然存在:是否无法访问pandas TextFileReader迭代器上的每个单独的块(例如,模仿read_table的get_chunk方法,或者使用类似dict的查找,data [0])做上面奇怪的单迭代for循环?

1 个答案:

答案 0 :(得分:2)

您是否尝试将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...