我正在从Excel表格中构建一个键列表:
我希望每个键都有一个'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看起来像这样:
现在我想从密钥列表构建一个hdf5结构。它应该是这样的:
pd.HDFStore有申请吗?
编辑:不幸的是我们在我的办公室只使用Pandas而不是h5py来处理hdf5文件。到目前为止提供的解决方案(h5py)不起作用。
答案 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]