如何在熊猫中分配内存

时间:2019-01-29 10:21:26

标签: pandas dynamic-memory-allocation

我阅读了约30000个文件。每个文件都是一个csv,具有相同的cols和行数。因此,我确切地知道矩阵的大小。

我要做的是:

#allocate a pandas Dataframe
data_n=pd.Dataframe()

for i in range(0,30000):
    #read the file and storeit to a temporary Dataframe
    tmp_n=pd.DataFrame({'Ping':Counter_4eh*m256,'SN':SN_4eh*m256,'Frequency':CF_4eh*m256,'Sonar_speed':CsT_4eh*m256,'Pulse_length':SL_4eh*m256,'Nomimal_point_angle':BA_4eh,'Absrorption':AC_4eh*m256,'Range':R})
    # now append in the "big" dataframe
    data_n=pd.concat([data_n,tmp_n],ignore_index=True)

这很耗时。反正可以预分配data_n并直接添加到大矩阵中吗?怎么样?

1 个答案:

答案 0 :(得分:1)

pd.concat的效率可能非常低,每次迭代都会一遍又一遍地复制所有已添加的数据。这可能比创建和加载小型DataFrame花费更多的时间。

您可以做的是为完整的数据(对于所有30000个文件)分配空的numpy数组,然后按索引迭代地填充它们。加载所有文件并填充所有numpy数组后,将它们组合到单个Pandas DataFrame中。

只有在摆脱concat时,才应该在加载文件时开始优化预分配。