【问题标题】:Creating HDF5 from multiple panda data frames从多个熊猫数据帧创建 HDF5
【发布时间】:2018-01-05 20:00:12
【问题描述】:

我有 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 个可以保存的数据帧中?

【问题讨论】:

    标签: python pandas dataframe pickle hdf5


    【解决方案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)
    

    【讨论】:

    • 很抱歉可能会被劫持,但是您将如何读取您使用 pandas 创建的 h5 文件?
    • @Stian: pandas.pydata.org/pandas-docs/stable/generated/… 但是如果你想在非 Python 环境中阅读它,首先有更好的方法来编写它(Pandas 的默认 HDF5 输出格式很奇怪而且不容易在例如 R) 中使用。
    • @JohnZwinck 非常感谢约翰。问题 - 对于将所有 DataFrame 存储到单个 HDF5 文件中的第一种方法,如果创建了多个不同的键,您如何读取包含所有数据帧的 HDF5?我无法将 HDF5 转换为数据帧,因为我不确定要使用哪个键。谢谢!
    • @ShabinaRayan:如果你被困在这个问题上,你应该发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2012-05-19
    • 2021-04-10
    • 2017-10-15
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多