从多个熊猫数据帧创建HDF5

时间:2017-07-30 02:04:12

标签: python pandas dataframe pickle hdf5

我有100个熊猫数据帧存储在我计算机上的目录中的.pkl文件中。我想浏览所有数据帧并将它们全部保存在1个HDF5文件中。我计划将所有数据帧保存在1个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')

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

1 个答案:

答案 0 :(得分:1)

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)

这会将所有DataFrame存储到单个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)