Python 从多个panda数据帧创建HDF5

Python 从多个panda数据帧创建HDF5,python,pandas,dataframe,pickle,hdf5,Python,Pandas,Dataframe,Pickle,Hdf5,我有100个熊猫数据帧存储在我的计算机目录中的.pkl文件中。我想浏览所有数据帧并将它们全部保存在1个HDF5文件中。我本来打算将所有数据帧保存在一个pickle文件中,但我听说HDF5明显更好更快 首先我是这样做的: path = '/Users/srayan/Desktop/data/Pickle' df = pd.DataFrame() for filename in glob.glob(os.path.join(path, '*.pkl')): newDF = pd.read_p

我有100个熊猫数据帧存储在我的计算机目录中的.pkl文件中。我想浏览所有数据帧并将它们全部保存在1个HDF5文件中。我本来打算将所有数据帧保存在一个pickle文件中,但我听说HDF5明显更好更快

首先我是这样做的:

path = '/Users/srayan/Desktop/data/Pickle'
df = pd.DataFrame()
for filename in glob.glob(os.path.join(path, '*.pkl')):
    newDF = pd.read_pickle(filename)
    df = df.append(newDF)
df.to_pickle('/Users/srayan/Desktop/data/Pickle/Merged.pkl')

但最长的部分是将庞大的数据帧转换成pickle。有什么方法可以将这个大数据帧放入HDF5中,或者有什么更好的建议可以将所有pickle文件聚合到一个可以保存的数据帧中?

HDF5文件在内部就像它自己的文件系统,您可以在其中存储任意多的内容。例如:

for filename in glob.glob('*.pkl'):
    df = pd.read_pickle(filename)
    key = os.path.basename(filename) # or choose another name
    df.to_hdf('merged.h5', key)
这将把所有数据帧存储到单个HDF5文件中。您可以使用旧文件名作为新文件中的键,也可以选择其他命名约定

如果您希望将数据连接到HDF5中存储的单个数据集中,请执行以下操作:

dfs = []
for filename in glob.glob('*.pkl'):
    dfs.append(pd.read_pickle(filename))

df = pd.concat(dfs)
key = 'all_the_things'
df.to_hdf('merged.h5', key)
我通常在HDF5中启用压缩。这不会使文件更难读取,并且可以节省大量磁盘空间:

df.to_hdf('merged.h5', key, complib='zlib', complevel=5)

很抱歉可能会被劫持,但是你如何读取你用pandas创建的h5文件?@Stian:但是如果你想在非Python环境中读取它,首先有更好的方法来编写它(pandas默认的HDF5输出格式非常奇怪,在e.g.R中不容易使用)。@JohnZwinck非常感谢你John。问题-对于第一种将所有数据帧存储到单个HDF5文件的方法,如果创建了多个不同的键,如何读取包含所有数据帧的HDF5?我无法将HDF5转换为数据帧,因为我不确定使用哪个键。谢谢@沙比纳拉扬:如果你被困在这个问题上,你应该发布一个新的问题。