我有一个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