pandas .to_csv()占用的内存比预期的多

ruarlubt  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(143)

我有一个数据集,它代表了一些电压与时间的关系。数据集有32个MSamples(32 X 1024 X 1024),每个样本是16位电压值和64位时间值。我将这个数据集表示为pandas DataFrame,它有32 X 1024 X 1024行(样本数)和两列(电压和时间)。
我使用pandas. to_csv()将此DataFrame保存为CSV。生成的CSV文件大小为1.5 GB。也就是说,每个电压是16位或2字节,并且每个时间是64位或8字节,因此每行是2 + 8 = 10字节。我期望整个文件为10 X(32 X 1024 X 1024)= 320 MB。
所以我在这里漏掉了一个大约5的因子。有人能解释一下这个矛盾吗?这个. to_csv()是如何工作的?谢谢
更新:提供更多代码。我有一个包含32个MSamples的列表,因此样本数为

N_SAMPLES = 32 * 1024 * 1024

字符串
并且每个样本是16位值(2字节)。这些样本保存在名为DATA的列表中。这些是在一段时间内获得的电压,我称这个时间段为DURATION。然后,我通过以下操作生成每个样本采集时间的列表:

t = np.linspace(0,DURATION,num=N_SAMPLES)


我假设通过这样做,t的每个元素都是np.float64,因此t的每个元素都是64位值(8字节)。然后创建字典:

data = {\
"Time [s]": t,
"Output [V]": DATA
}


然后我创建pandas DataFrame并将其保存为CSV:

dataFrame = pd.DataFrame(data)
dataFrame.to_csv('output.csv', mode='w')


如果我的计算是正确的,每行是2 + 8 = 10字节,有32 X 1024 X 1024行。所以我期望CSV的大小是320MB,但实际上是1.5GB。我错过了什么?

b4lqfgs4

b4lqfgs41#

试试这个,只是转换第一次和整数,然后写入没有索引的文件:

data = {
"Time [s]": t.astype(np.int64),  # Convert time to 64-bit integer
"Output [V]": np.array(DATA, dtype=np.int16)  # Convert voltage to 16-bit 
integer
}

dataFrame = pd.DataFrame(data)
dataFrame.to_csv('output.csv', mode='w', index=False, header=False)

字符串

相关问题