我正在使用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循环?
答案 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...