Python 读取索引不在列表中的 HDF5 行
Python Read HDF5 Rows Where Index Not in List
我使用以下 Python/Pandas 代码从 HDF table 中读取随机行子集:
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 table 中提取其余的数据行。但以下抛出错误:
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 行?
因为 table 比我的 RAM 大,我想避免预先从 HDF 中提取所有行(即使是块)然后拆分它以同时保存两个 tables .我可以将索引映射到另一列,并在不在该列的映射值中的行上设置子集。但这可能比直接查询索引慢很多。
你可以使用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 可选地,您可能希望 select 块中的其余行...
我使用以下 Python/Pandas 代码从 HDF table 中读取随机行子集:
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 table 中提取其余的数据行。但以下抛出错误:
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 行?
因为 table 比我的 RAM 大,我想避免预先从 HDF 中提取所有行(即使是块)然后拆分它以同时保存两个 tables .我可以将索引映射到另一列,并在不在该列的映射值中的行上设置子集。但这可能比直接查询索引慢很多。
你可以使用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 可选地,您可能希望 select 块中的其余行...