Я пытаюсь изучить 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
У вас есть много способов сделать это.
Создать пустой фреймворк данных:
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)
Я надеюсь, что это помогает.