使用数字数组存储大型熊猫系列的最有效方法是什么?



我有一个pandas系列,每行包含numpy二维数组。它看起来像这样:

import numpy as np
import pandas as pd
s = pd.Series([np.random.rand(4, 3) for i in range(0, 4)])
s.index = pd.MultiIndex.from_tuples([(1, 1), (1, 2), (2, 1), (2, 2)], names = ['id1', 'id2'])
id1  id2
1    1      [[0.03782554831829077, 0.5265070448370034, 0.9...
2      [[0.8542842542246349, 0.532639803094301, 0.390...
2    1      [[0.34916931374311333, 0.5820394142173778, 0.1...
2      [[0.08834940949270964, 0.9464717661752107, 0.4...
dtype: object

然而,实际数据有超过50k行,每行中有7140x3个阵列。我需要把它存储在磁盘上。我通常选择具有大数据文件的.parquet,因为它的转换效率很高,但恐怕它无法将numpy数组作为列处理。Pickle似乎工作得很好,但它会产生10GB大小的文件,所以对于许多类似的数据集,我很容易就会耗尽空间。所以我想问一下,存储这类数据集最节省内存的方法是什么?

您可以将带pickle的索引和值存储为NumPy数组:

np.stack(s.values).tofile(filepath) #saves as np.array of shape len(s)x7140x3

最新更新