Создание пустого фрейма данных или списка с именами столбцов, а затем добавление данных по именам столбцов

1

Я пытаюсь изучить python 2.7, преобразовывая код, который я написал в VB, на python. У меня есть имена столбцов, и я пытаюсь создать пустой фреймворк или список, а затем добавить строки путем итерации (см. Ниже). Я не знаю, сколько строк я должен добавить заранее. Я могу создать dataframe с именами столбцов, но не могу понять, как добавить данные. Я рассмотрел несколько таких вопросов, как мои, но строки/столбцы данных неизвестны заранее.

фрагмент кода:

cnames=['Security','Time','Vol_21D','Vol2_21D','MaxAPV_21D','MinAPV_21D' ]
df_Calcs = pd.DataFrame(index=range(10), columns=cnames)

это создает пустой df (df_Calcs)... тогда код ниже - это то, где я получаю данные для заполнения строк... Я использую n в качестве счетчика для ввода новой строки # (есть еще 20 столбцов, которые я добавляю к строке), но ниже следует объяснить, что я пытаюсь сделать.

i = 0
n = 0
while True:
        df_Calcs.Security[n] = i + 1
        df_Calcs.Time[n] = '09:30:00'
        df_Calcs.Vol_21D[n] = i + 2
        df_Calcs.Vol2_21D[n] = i + 3
        df_Calcs.MaxAPV_21D[n] = i + 4
        df_Calcs.MinAPV_21D[n] = i + 5
        i = i +1
        n = n +1
        if i > 4:
           break

print df_Calcs Если я должен использовать список или массив, пожалуйста, дайте мне знать, я стараюсь сделать это самым быстрым способом. Эти данные затем будут отправлены в таблицу db MySQL.

Результат...

  Security      Time Vol_21D Vol2_21D MaxAPV_21D MinAPV_21D
0        1  09:30:00       2        3          4          5
1        2  09:30:00       3        4          5          6
2        3  09:30:00       4        5          6          7
3        4  09:30:00       5        6          7          8
4        5  09:30:00       6        7          8          9
5      NaN       NaN     NaN      NaN        NaN        NaN
6      NaN       NaN     NaN      NaN        NaN        NaN
7      NaN       NaN     NaN      NaN        NaN        NaN
8      NaN       NaN     NaN      NaN        NaN        NaN
9      NaN       NaN     NaN      NaN        NaN        NaN
  • 0
    Одна из фундаментальных особенностей панд - это то, что она построена поверх numpy и поэтому выполняет матричные или блочные операции, а не зацикливание. Вы, кажется, запускаете агрегаты, которые можно выполнить в запросе SQL или в pandas без каких-либо циклов. Пожалуйста, опубликуйте текущие данные и желаемые результаты.
  • 0
    Я делаю некоторые агрегации и несколько других вещей. Я могу выполнить создание кадра данных, изменив первый фрагмент, который я редактировал выше. Затем удаляем все пустые строки в кадре данных. Я бы предпочел не «переоценивать» количество строк.
Показать ещё 3 комментария
Теги:
pandas
dataframe
python-2.7

1 ответ

1
Лучший ответ

У вас есть много способов сделать это.

Создать пустой фреймворк данных:

cnames=['Security', 'Time', 'Vol_21D', 'Vol2_21D', 'MaxAPV_21D', 'MinAPV_21D']
df = pd.DataFrame(columns=cnames)

Выход:

Empty DataFrame
Columns: [Security, Time, Vol_21D, Vol2_21D, MaxAPV_21D, MinAPV_21D]
Index: []

Затем в цикле вы можете создать pd.series и добавить к вашему фреймворку данных, например:

df.append(pd.Series([1, 2, 3, 4, 5, 6], cnames), ignore_index=True)

Или вы можете добавить dict:

df.append({'Security': 1,
           'Time': 2,
           'Vol_21D': 3,
           'Vol2_21D': 4,
           'MaxAPV_21D': 5,
           'MinAPV_21D': 6
          }, ignore_index=True)

Это будет тот же результат:

  Security Time Vol_21D Vol2_21D MaxAPV_21D MinAPV_21D
0        1    2       3        4          5          6

Но я думаю, что более быстрый и питонический путь: сначала создайте массив, затем добавьте все raws в массив и создайте фрейм данных из массива.

data = []
for i in range(0,5):
    data.append([1,2,3,4,i,6])
df = pd.DataFrame(data, columns=cnames)

Я надеюсь, что это помогает.

  • 0
    Я думаю, что ваш последний поможет ... Я никогда не думал о создании кадра данных после того, как данные были в списке. Затем я узнаю количество записей в кадре данных. Это должно работать отлично ... Я буду использовать цикл while, который у меня есть, со счетчиком, и я дам вам знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню