2015-10-08 2 views
3

В pandas documentation, говорится:Python Панды - Использование списка понимание для Concat кадров данных

Стоит отметить, однако, что CONCAT (и, следовательно, добавление) делает полную копию данных, и постоянное повторное использование этой функции может создать значительный удар по производительности. Если вам необходимо использовать операцию для нескольких наборов данных, используйте понимание списка.

frames = [ process_your_file(f) for f in files ]

result = pd.concat(frames)

Моя нынешняя ситуация такова, что я буду конкатенации новый dataframe к растущему списку кадров данных снова и снова. Это приведет к ужасающему числу конкатенаций.

Я беспокоюсь о производительности, и я не уверен, как использовать понимание списка в этом случае. Мой код выглядит следующим образом.

df = first_data_frame 
while verify == True: 
    # download data (new data becomes available through each iteration) 
    # then turn [new] data into data frame, called 'temp' 
    frames = [df, temp] 
    df = concat(frames) 
    if condition_met: 
     verify == False 

Я не думаю, что части, которые загружают данные и создают фрейм данных, актуальны; моя озабоченность связана с постоянной конкатенацией.

Как реализовать понимание списка в этом случае?

ответ

2

Если у вас есть цикл, который нельзя поместить в понимание списка (например, цикл while), вы можете инициализировать пустой список вверху, а затем добавить к нему во время цикла while. Пример:

frames = [] 
while verify: 
    # download data 
    # temp = pd.DataFrame(data) 
    frames.append(temp) 
    if condition_met: 
     verify = False 

pd.concat(frames) 

Вы также можете поместить цикл в функции генератора, а затем использовать список понимание, но это может быть более сложным, чем вам нужно.

Кроме того, если ваши данные естественным образом представляют собой список диктонов или что-то в этом роде, вам может не понадобиться создавать все временные фреймы данных - просто добавьте все свои данные в один гигантский список dicts, а затем преобразуйте их в блок данных в одном вызове в самом конце.

Смежные вопросы