簡體   English   中英

使用列名創建一個空的數據框或列表,然后按列名添加數據

[英]Creating an empty dataframe or List with column names then add data by column names

我正在嘗試通過將我在 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

你有很多方法可以做到這一點。

創建空數據框:

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

但我認為,更快和 Pythonic 的方式:首先創建一個數組,然后將所有原始數據附加到數組並從數組制作數據幀。

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

我希望它有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM