2017-07-30 63 views
0

我有100个熊猫数据帧存储在我的电脑上一个目录中的.pkl文件中。我想要浏览所有的数据框并将它们全部保存在1个HDF5文件中。我打算将所有数据帧保存在1个pickle文件中,但我听说HDF5显然更好更快。从多个熊猫数据帧创建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

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) 
+0

对不起,可能会发生劫持,但是如何读取用熊猫创建的h5文件? – Stian

+0

@Stian:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_hdf.html但如果你想在非Python环境中阅读它,有更好的方法来写在第一位(熊猫的默认HDF5输出格式非常奇怪,并且不容易在例如R中使用)。 –

+0

@JohnZwinck非常感谢你。问题 - 对于第一种将所有DataFrames存储到单个HDF5文件中的方法,如果创建了多个不同的密钥,那么如何读取包含所有数据帧的HDF5?我无法将HDF5转换为数据帧,因为我不确定要使用哪个键。谢谢! –