我试图通过将我在VB中编写的代码转换为python来学习python 2.7。我有列名,并且尝试创建一个空的数据框或列表,然后通过迭代添加行(请参见下文)。我不知道我需要预先添加的总行数。我可以使用列名创建一个数据框,但无法弄清楚如何添加数据。我已经看过像我这样的几个问题,但数据的行/列是事先未知的。
代码段
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
打印df_Calcs 如果我应该使用列表或数组,请告诉我,我正在尝试以最快,最有效的方式进行操作。然后,这些数据将被发送到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 :(得分: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)
或者您可以附加一个字典:
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
但是我认为,这是更快,更Python化的方式:首先创建一个数组,然后将所有原始数据附加到数组中,然后从数组中制作数据帧。
data = []
for i in range(0,5):
data.append([1,2,3,4,i,6])
df = pd.DataFrame(data, columns=cnames)
希望对您有帮助。