gpt4 book ai didi

Python读取索引不在列表中的HDF5行

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:27 24 4
gpt4 key购买 nike

我使用以下 Python/Pandas 代码从 HDF 表中读取行的随机子集:

hdf_store = pd.HDFStore('path_to_data.h5')
total_rows = hdf_store.get_storer('hdf_table_name').nrows

num_rows = int(total_rows * .25)
row_indices = np.random.randint(0,rows_indices,size=num_rows)

my_df = pd.read_hdf(hdf_store, 'hdf_table_name', where=pd.Index(row_indices))

在程序的后面,我想从 HDF5 表中提取其余的数据行。但以下引发了错误:

rest_of_rows = pd.read_hdf(hdf_store, 'hdf_table_name',
where=pd.Index(not in (row_indices)))

rest_of_rows = pd.read_hdf(hdf_store, 'hdf_table_name',
where=not pd.Index(row_indices))

有没有办法通过不在索引列表中的记录来提取 HDF 行?

因为表比我的 RAM 大,所以我想避免预先从 HDF 中提取所有行(即使是 block ),然后将其拆分以同时保存两个表。我可以将索引映射到另一列,并对不在该列的映射值中的行进行子集。但这可能比直接查询索引慢很多。

最佳答案

您可以使用Index.difference方法。

演示:

# randomly select 25% of index elements (without duplicates `replace=False`)
sample_idx = np.random.choice(np.arange(total_rows), total_rows//4, replace=False)

# select remaining index elements
rest_idx = pd.Index(np.arange(total_rows)).difference(sample_idx)

# get rest rows by index
rest = store.select('hdf_table_name', where=rest_idx)

PS(可选)您可能希望选择 block 中的其余行...

关于Python读取索引不在列表中的HDF5行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40309664/

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