Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas和HDF5中的文件大小缩减_Python_Numpy_Pandas_Hdf5_Pytables - Fatal编程技术网

Python Pandas和HDF5中的文件大小缩减

Python Pandas和HDF5中的文件大小缩减,python,numpy,pandas,hdf5,pytables,Python,Numpy,Pandas,Hdf5,Pytables,我正在运行一个模型,该模型将数据输出到多个帧中,然后将这些帧保存到HDF5文件中。该模型运行数百次,每次都将新列(多索引)添加到现有HDF5文件的帧中。这是通过Pandasmerge完成的。由于每个运行的帧长度不同,因此帧中最终会出现大量的NaN值 在完成足够多的模型运行后,如果行或列与发生错误的模型运行相关联,则会从帧中删除数据。在该过程中,新的数据帧被放入新的HDF5文件中。以下伪python显示了此过程: with pandas.HDFStore(filename) as store:

我正在运行一个模型,该模型将数据输出到多个帧中,然后将这些帧保存到HDF5文件中。该模型运行数百次,每次都将新列(多索引)添加到现有HDF5文件的帧中。这是通过Pandas
merge
完成的。由于每个运行的帧长度不同,因此帧中最终会出现大量的
NaN

在完成足够多的模型运行后,如果行或列与发生错误的模型运行相关联,则会从帧中删除数据。在该过程中,新的数据帧被放入新的HDF5文件中。以下伪python显示了此过程:

with pandas.HDFStore(filename) as store:
    # figure out which indices should be removed
    indices_to_drop = get_bad_indices(store)

    new_store = pandas.HDFStore(reduced_filename) 
    for key in store.keys():
        df = store[key]
        for idx in indices_to_drop:
             df = df.drop(idx, <level and axis info>)
        new_store[key] = df
    new_store.close()
以pandas.HDFStore(文件名)作为存储的
:
#找出应该删除哪些索引
索引\u到\u删除=获取\u坏的\u索引(存储)
new_store=pandas.HDFStore(精简的_文件名)
对于存储区中的键。键():
df=存储[键]
对于索引中的idx\u到\u drop:
df=df.下降(idx,)
新存储[键]=df
新建商店。关闭()
新的hdf5文件最终大约是原始文件大小的10%。文件中唯一的区别是所有的
NaN
值不再相等(而是所有numpy float64值)

我的问题是,如何在现有hdf5文件上实现这种文件大小缩减(可能是通过管理
NaN
值实现的)?有时候我不需要做上面的步骤,但我无论如何都是为了得到减量。是否有现有的Pandas或PyTables命令可以执行此操作?提前非常感谢。

请参阅文档

警告说明了一切:

警告:请注意,HDF5不会回收h5文件中的空间 自动地因此,重复删除(或删除节点)和 再次添加会增加文件大小。要清理文件, 使用ptrepack


是的,这对我很有用,从98GB到17GB,我不知道这一点,我的hdf文件大小一直在增长,