我尝试将数据从Pandas数据帧写入嵌套的hdf5文件,每个组中包含多个组和数据集。我希望将其保存为单个文件,将来每天都会增长。我已经使用了以下代码,它显示了我想要实现的结构
import h5py
import numpy as np
import pandas as pd
file = h5py.File('database.h5','w')
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
groups = ['A','B','C']
for m in groups:
group = file.create_group(m)
dataset = ['1','2','3']
for n in dataset:
data = df
ds = group.create_dataset(m + n, data.shape)
print ("Dataset dataspace is", ds.shape)
print ("Dataset Numpy datatype is", ds.dtype)
print ("Dataset name is", ds.name)
print ("Dataset is a member of the group", ds.parent)
print ("Dataset was created in the file", ds.file)
print ("Writing data...")
ds[...] = data
print ("Reading data back...")
data_read = ds[...]
print ("Printing data...")
print (data_read)
file.close(
)
这样就创建了嵌套结构,但它丢失了索引和列。我试过了
df.to_hdf('database.h5', ds, table=True, mode='a')
但没有工作,我收到此错误
AttributeError:'数据集'对象没有属性' split'
任何人都可以解决一些问题。非常感谢
答案 0 :(得分:2)
df.to_hdf()期望字符串为key
参数(第二个参数):
键:字符串
商店中组的标识符
所以试试这个:
df.to_hdf('database.h5', ds.name, table=True, mode='a')
其中ds.name
应该返回一个字符串(键名):
In [26]: ds.name
Out[26]: '/A1'
答案 1 :(得分:2)
我认为可以使用pandas \ pytables和HDFStore类而不是h5py。所以我尝试了以下
res.filter(_.contains("x"))
它可以工作,从A / d到C / f创建的9个组(组中而不是pyatbles中的数据集而不是h5py?)。保留了列和索引,可以执行我需要的数据帧操作。仍然想知道这是否是从特定群体中检索数据的有效方式,这将在未来变得巨大,例如
等操作import numpy as np
import pandas as pd
db = pd.HDFStore('Database.h5')
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 3), index=index, columns=['Col1', 'Col2', 'Col3'])
groups = ['A','B','C']
i = 1
for m in groups:
subgroups = ['d','e','f']
for n in subgroups:
db.put(m + '/' + n, df, format = 'table', data_columns = True)