从excel表构建hdf5结构

时间:2018-04-04 08:04:42

标签: python python-3.x pandas dataframe hdf5

我正在从Excel表格中构建一个键列表:

Table

我希望每个键都有一个'X'和一个'Y'子组。然后将其保存到一个密钥列表:

import pandas as pd

df = pd.read_excel('file.xlsx', usecols = ['A','B','C'])
print(df)

keylist = []
list1, list2, list3 = df['A'].tolist(), df['B'].tolist(), df['C'].tolist()

for i in zip(list1, list2):
    val = map(str, i)
    keylist.append("/".join(val) + '/X')
    val = map(str, i)
    keylist.append("/".join(val) + '/Y')

print(keylist)

Keylist看起来像这样:

Keylist

现在我想从密钥列表构建一个hdf5结构。它应该是这样的:

enter image description here

pd.HDFStore有申请吗?

编辑:不幸的是我们在我的办公室只使用Pandas而不是h5py来处理hdf5文件。到目前为止提供的解决方案(h5py)不起作用。

1 个答案:

答案 0 :(得分:1)

如果您的数据包含float数组,我建议您使用pd.HDFStore

相反,请使用与h5py语法完美联系的numpy。仅使用pandas来读取Excel文件。阅读h5py documentation了解如何将数据集添加到组中。

这种方法的好处是你会发现它更有效(pd.HDFStore有开销)和可移动(你的HDF5文件可以在Python之外读取)。

import pandas as pd
import h5py

df = pd.DataFrame([['blue', 'a', 'a1'], ['blue', 'a', 'a2'],
                   ['blue', 'b', 'b1'], ['red', 'c', 'c1']],
                  columns=list('ABC'))

## read in file
# df = pd.read_excel('group_file.xlsx')

## create group strings
group_strings = ['/'+'/'.join(route) for route in df.values]

# ['/blue/a/a1', '/blue/a/a2', '/blue/b/b1', '/red/c/c1']

## create HDF5 groups
with h5py.File('file.h5', 'w') as f:
    for group in group_strings:
        for item in ('X', 'Y'):
            grp = f[group+'/'+item]