将许多熊猫数据框保存在一起的最佳方法是什么?

数据挖掘 Python 熊猫 数据框
2021-09-22 13:20:17

我正在寻找一种按城市保存房价数据的方法,例如每个城市一个数据框的熊猫面板。但我需要数据框是独立的,这意味着如果一个数据框损坏,其他数据框不会受到影响。我尝试使用 pickle 和 csv,但是一旦一行被损坏,我就会丢失整个文件。

1个回答

如果您想充分参与并能够为您创建的每个面板指定名称,您可以查看 h5 文件格式。

这允许您在命名容器中对数据集进行分组。然后,您可以稍后从磁盘中逐一读取它们,即您不需要将整个数据集读入内存。

以下是保存此类数据集的函数示例:

def save_h5(h5_filename, data, labels, descr=None,
            data_dtype='float32', label_dtype='float32'):
    """Create a compressed .h5 file containing:
    data    : numpy array
    labels  : numpy array
    descr   : text description ofthe data contained (must be a string)
    """

    if os.path.exists(h5_filename):
        # prevent overwriting a file
        sys.exit('File already exists!')

    h5_fout = h5py.File(h5_filename)

    h5_fout.create_dataset(
        name='data',
        data=data,
        compression='gzip', compression_opts=4,
        dtype=data_dtype)

    h5_fout.create_dataset(
        name='labels',
        data=labels,
        compression='gzip', compression_opts=4,
        dtype=label_dtype)


    if descr is not None:
        h5_fout.create_dataset(
            'description', data=descr)

    h5_fout.close()

有关参数的含义,请查看文档

您可以编写类似的函数来访问保存的 h5 文件。这确实是一种灵活的数据保存方式,并且可以使用开源世界中最著名的(广泛传播的)算法之一进行压缩:gzip!还实现了其他可能性。


附带说明一下,如果您想最大限度地减少损坏的可能性,您可以考虑将每个面板/DataFrame(无论您采用哪种方法)保存到单独的文件中,然后进行复制/备份。

另外,你说:

我尝试使用 pickle 和 csv,但是一旦一行被损坏,我就会丢失整个文件。

...一个简单csv文件的美妙之处在于,您实际上可以在记事本或电子表格中打开它,通常会找到“损坏”的行并修复/删除它。另一方面,Pickle 调试起来有点复杂。