Использование pandas .append внутри цикла for

Я добавляю строки в pandas DataFrame в цикле for, но в конце фреймворк всегда пуст. Я не хочу добавлять строки в массив, а затем вызывать конструктор DataFrame, потому что мой фактический цикл for обрабатывает множество данных. Я также пробовал pd.concat без успеха. Может ли кто-нибудь выделить то, что мне не хватает, чтобы заставить заявление append работать? Вот фиктивный пример:

 import pandas as pd import numpy as np data = pd.DataFrame([]) for i in np.arange(0, 4): if i % 2 == 0: data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True) else: data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True) print data.head() Empty DataFrame Columns: [] Index: [] [Finished in 0.676s] 

3 Solutions collect form web for “Использование pandas .append внутри цикла for”

Вам нужно установить переменные data равными прилагаемому фрейму данных. В отличие от метода append в списке python, приложение pandas не происходит на месте

 import pandas as pd import numpy as np data = pd.DataFrame([]) for i in np.arange(0, 4): if i % 2 == 0: data = data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True) else: data = data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True) print(data.head()) AB 0 0 1.0 1 2 3.0 2 3 NaN 

Каждый раз, когда вы вызываете append, Pandas возвращает копию исходного фрейма и новую строку. Это называется квадратичной копией, и это операция O (N ^ 2), которая быстро станет очень медленной (особенно потому, что у вас много данных).

В вашем случае я бы рекомендовал использовать списки, добавить к ним, а затем вызвать конструктор dataframe.

 a_list = [] b_list = [] for data in my_data: a, b = process_data(data) a_list.append(a) b_list.append(b) df = pd.DataFrame({'A': a_list, 'B': b_list}) del a_list, b_list 

Задержки

 %%timeit data = pd.DataFrame([]) for i in np.arange(0, 10000): if i % 2 == 0: data = data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True) else: data = data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True) 1 loops, best of 3: 6.8 s per loop %%timeit a_list = [] b_list = [] for i in np.arange(0, 10000): if i % 2 == 0: a_list.append(i) b_list.append(i + 1) else: a_list.append(i) b_list.append(None) data = pd.DataFrame({'A': a_list, 'B': b_list}) 100 loops, best of 3: 8.54 ms per loop 

Вы можете построить свою фреймворк без цикла:

 n = 4 data = pd.DataFrame({'A': np.arange(n)}) data['B'] = np.NaN data.loc[data['A'] % 2 == 0, 'B'] = data['A'] + 1 

Для:

 n = 10000 

Это немного быстрее:

 %%timeit data = pd.DataFrame({'A': np.arange(n)}) data['B'] = np.NaN data.loc[data['A'] % 2 == 0, 'B'] = data['A'] + 1 100 loops, best of 3: 3.3 ms per loop 

против

 %%timeit a_list = [] b_list = [] for i in np.arange(n): if i % 2 == 0: a_list.append(i) b_list.append(i + 1) else: a_list.append(i) b_list.append(None) data1 = pd.DataFrame({'A': a_list, 'B': b_list}) 100 loops, best of 3: 12.4 ms per loop 
  • как использовать функцию dataframe между_time ()
  • Pandas Dataframe разделился на сеансы
  • Python Pandas, используя предыдущее значение в Dataframe
  • Аннотировать бары со значениями на графиках Pandas bar
  • Tensorflow SKCompat преобразует значения float32 в Pandas dataframe в значения tf.float64, а затем дает ошибку
  • Эффективно проверьте, присутствует ли значение в любом из заданных диапазонов
  • Веб-скребок с Selenium Python
  • DataFrame.interpolate () экстраполирует данные за отсутствующие данные
  •  
    Interesting Posts for Van-Lav

    Python fetchching <title>

    Подходит ли он для использования сигналов django в одном приложении?

    как использовать две разные функции в кросс-таблице / pivot_table в пандах?

    Почему «если нет (a и b)« быстрее, чем «если нет или нет b»?

    Как получить результаты численного подбора при построении регрессии в морском дне?

    Как получить insert_primary_key из db.engine.connect (). Выполнить вызов

    Почему создание кортежа работает, если первый элемент является Исключением?

    Python: является ли итерация многомерного массива супер медленным?

    Почему я не могу отправлять электронные письма нескольким получателям с помощью этого сценария?

    Каков самый быстрый способ рисовать изображение из дискретных значений пикселей в Python?

    Есть ли способ сделать collection.Counter (Python2.7) известно, что его список ввода отсортирован?

    Как создать объект изображения в PIL / Python

    Python: Идиоматические свойства для структурированных данных?

    Как заставить Scrapy отображать пользовательский агент для каждого запроса на загрузку в журнале?

    PyPy – Как он может победить CPython?

    Python - лучший язык программирования в мире.