如何将 Pandas 数据框写入 HDF5 数据集
Posted
技术标签:
【中文标题】如何将 Pandas 数据框写入 HDF5 数据集【英文标题】:How to write a Pandas Dataframe into a HDF5 dataset 【发布时间】:2018-04-20 07:49:14 【问题描述】:我正在尝试将 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: 'Dataset' 对象没有属性 'split'
任何人都可以解释一下吗?非常感谢
【问题讨论】:
pandas
使用pytables
将数据帧写入hdf5
文件。使用h5py
查找这些文件有一些问题。我记得布局很复杂,但并非不可能遵循。 h5py
本质上是 numpy
到 hdf5
的接口。
***.com/questions/41173254/…
【参考方案1】:
df.to_hdf() 需要一个字符串作为key
参数(第二个参数):
键:字符串
商店中群组的标识符
所以试试这个:
df.to_hdf('database.h5', ds.name, table=True, mode='a')
ds.name
应该返回一个字符串(键名):
In [26]: ds.name
Out[26]: '/A1'
【讨论】:
这个调用的来源pytables.to_hdf
。
@hpaulj,是的,它调用pandas.io.pytables.to_hdf()
,但我不明白你想说什么/显示...
@MaxU 我已经尝试了键中的 ds.name 但不起作用,因为它仍然丢失列和索引,而且它返回全零【参考方案2】:
我想试试 pandas\pytables 和 HDFStore 类而不是 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)
它有效,从 A/d 到 C/f 创建了 9 个组(组而不是 pyatbles 中的数据集而不是 fo h5py?)。保留的列和索引可以执行我需要的数据帧操作。仍然想知道这是否是从特定组中检索数据的有效方法,该组在未来将变得巨大,即像
这样的操作db['A/d'].Col1[4:]
【讨论】:
以上是关于如何将 Pandas 数据框写入 HDF5 数据集的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Pandas DataFrame 存储为 HDF5 PyTables 表(或 CArray、EArray 等)?
如何在 R 中将保存在 pandas 中的数据框作为 HDF5 文件加载?
将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集