我阅读了约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并直接添加到大矩阵中吗?怎么样?
答案 0 :(得分:1)
pd.concat
的效率可能非常低,每次迭代都会一遍又一遍地复制所有已添加的数据。这可能比创建和加载小型DataFrame花费更多的时间。
您可以做的是为完整的数据(对于所有30000个文件)分配空的numpy数组,然后按索引迭代地填充它们。加载所有文件并填充所有numpy数组后,将它们组合到单个Pandas DataFrame中。
只有在摆脱concat
时,才应该在加载文件时开始优化预分配。