Как выделить память в пандах - PullRequest
0 голосов
/ 29 января 2019

Я прочитал около 30000 файлов.Каждый файл представляет собой CSV с одинаковым количеством столбцов и строк.Таким образом, я точно знаю размер матрицы.

Что я делаю:

#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 голосов
/ 30 января 2019

pd.concat может быть очень неэффективным, копируя все уже добавленные данные снова и снова на каждой итерации.Это может занять гораздо больше времени, чем создание и загрузка небольшого DataFrame.

Что вы можете сделать, это выделить пустые пустые массивы для полных данных (для всех 30000 файлов), а затем итеративно заполнить их по индексу.Когда все файлы загружены и все пустые массивы заполнены, объедините их в один Pandas DataFrame.

Только при избавлении от concat следует начинать оптимизацию предварительного выделения при загрузке файлов.

...