读取 HDF5 文件到 pandas DataFrame 有条件
read HDF5 file to pandas DataFrame with conditions
我有一个巨大的 HDF5 文件,我想将其中的一部分加载到 pandas DataFrame 中以执行一些操作,但我对过滤某些行感兴趣。
我可以用一个例子更好地解释:
原始 HDF5 文件看起来像:
A B C D
1 0 34 11
2 0 32 15
3 1 35 22
4 1 34 15
5 1 31 9
1 0 34 15
2 1 29 11
3 0 34 15
4 1 12 14
5 0 34 15
1 0 32 13
2 1 34 15
etc etc etc etc
我想做的是将其原样加载到 pandas Dataframe 但仅 where A==1 or 3 or 4
到现在为止,我可以使用以下方法加载整个 HDF5:
store = pd.HDFStore('Resutls2015_10_21.h5')
df = pd.DataFrame(store['results_table'])
我看不出如何在此处包含 where
条件。
您可以使用 pandas.read_hdf
(here), with the optional parameter of where
.
For example:read_hdf('store_tl.h5', 'table', where = ['index>2'])
hdf5
文件必须以 table
format(相对于 fixed
格式)写入
可以使用 pd.read_hdf
的 where
参数进行查询。
此外,A
必须是 declared as a data_column:
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
format='table')
或者,将所有列指定为(可查询的)数据列:
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=True,
format='table')
那么你可以使用
pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]')
到 select 行,其中值列 A
为 1、3 或 4。例如,
import numpy as np
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2],
'B': [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1],
'C': [34, 32, 35, 34, 31, 34, 29, 34, 12, 34, 32, 34],
'D': [11, 15, 22, 15, 9, 15, 11, 15, 14, 15, 13, 15]})
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
format='table')
print(pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]'))
产量
A B C D
0 1 0 34 11
2 3 1 35 22
3 4 1 34 15
5 1 0 34 15
7 3 0 34 15
8 4 1 12 14
10 1 0 32 13
如果您有一个很长的值列表,vals
,那么您可以使用字符串格式来组成正确的 where
参数:
where='A in {}'.format(vals)
我有一个巨大的 HDF5 文件,我想将其中的一部分加载到 pandas DataFrame 中以执行一些操作,但我对过滤某些行感兴趣。
我可以用一个例子更好地解释:
原始 HDF5 文件看起来像:
A B C D
1 0 34 11
2 0 32 15
3 1 35 22
4 1 34 15
5 1 31 9
1 0 34 15
2 1 29 11
3 0 34 15
4 1 12 14
5 0 34 15
1 0 32 13
2 1 34 15
etc etc etc etc
我想做的是将其原样加载到 pandas Dataframe 但仅 where A==1 or 3 or 4
到现在为止,我可以使用以下方法加载整个 HDF5:
store = pd.HDFStore('Resutls2015_10_21.h5')
df = pd.DataFrame(store['results_table'])
我看不出如何在此处包含 where
条件。
您可以使用 pandas.read_hdf
(here), with the optional parameter of where
.
For example:read_hdf('store_tl.h5', 'table', where = ['index>2'])
hdf5
文件必须以 table
format(相对于 fixed
格式)写入
可以使用 pd.read_hdf
的 where
参数进行查询。
此外,A
必须是 declared as a data_column:
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
format='table')
或者,将所有列指定为(可查询的)数据列:
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=True,
format='table')
那么你可以使用
pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]')
到 select 行,其中值列 A
为 1、3 或 4。例如,
import numpy as np
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2],
'B': [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1],
'C': [34, 32, 35, 34, 31, 34, 29, 34, 12, 34, 32, 34],
'D': [11, 15, 22, 15, 9, 15, 11, 15, 14, 15, 13, 15]})
df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
format='table')
print(pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]'))
产量
A B C D
0 1 0 34 11
2 3 1 35 22
3 4 1 34 15
5 1 0 34 15
7 3 0 34 15
8 4 1 12 14
10 1 0 32 13
如果您有一个很长的值列表,vals
,那么您可以使用字符串格式来组成正确的 where
参数:
where='A in {}'.format(vals)