簡體   English   中英

使用for循環附加到Pandas中的空數據框

[英]Appending to an empty data frame in Pandas using a for loop

我寫這篇文章是因為我有一個for循環的問題,該循環會在數據框為空時填充該數據框。 不幸的是,這些帖子使用循環填充了空的python 數據框,並在Pandas中附加到了一個空的數據框? 創建一個空的Pandas DataFrame,然后填充它? 沒幫我解決。

我的嘗試首先是要在列表“ listDataframe”中找到空的數據框,然后要用一些選定的列填充它們。 我相信我的代碼比我的解釋更清楚。 我不能做的就是使用其原始名稱保存新數據框。 這是我的嘗試:

for k,j in zip(listOwner,listDataframe):
for y in j:
    if y.empty:
        data = pd.DataFrame({"Event Date": list_test_2, "Site Group Name" : k, "Impressions" : 0})
        y = pd.concat([data,y])
        #y = y.append(data)

其中“ listOwner”,“ listDataframe”和“ list_test_2”分別由下式給出:

listOwner = ['OWNER ONE', 'OWNER TWO', 'OWNER THREE', 'OWNER FOUR']
listDataframe = [df_a,df_b,df_c,df_d]

df_a = [df_ap_1, df_di_1, df_er_diret_1, df_er_s_1]
df_b = [df_ap_2, df_di_2, df_er_diret_2, df_er_s_2]
df_c = [df_ap_3, df_di_3, df_er_diret_3, df_er_s_3]
df_d = [df_ap_4, df_di_4, df_er_diret_4, df_er_s_4]

list_test_2 = []
for i in range(1,8):
    f = (datetime.today() - timedelta(days=i)).date()
    list_test_2.append(datetime.combine(f, datetime.min.time()))

空數據幀為df_ap_1和df_ap_3。 在運行完以上幾行(使用concat和append)之后,如果我調用這兩個數據幀,它們仍然為空。 任何想法為什么會發生以及如何克服這個問題?

UPDATE

為了避免append和concat,我嘗試使用即將來臨的嘗試(同樣沒有成功)。

for k,j in zip(listOwner,listDataframe):
    for y in j:
        if y.empty:
            y = pd.DataFrame({"Event Date": list_test_2, "Site Group Name" : k, "Impressions" : 0})

兩個理想的結果應該是:

在此處輸入圖片說明

其中第一個數據幀應稱為df_ap_1而第二個數據幀應稱為df_ap_3

提前致謝。

Drigo

這是一種方法:

import pandas as pd

columns = ['Event Date', 'Site Group Name', 'Impressions']
df_ap_1 = pd.DataFrame(columns=columns) #empty dataframe
df_di_1 = pd.DataFrame(columns=columns) #empty dataframe
df_ap_2 = pd.DataFrame({'Event Date':[1], 'Site Group Name':[2], 'Impressions': [3]}) #non-empty dataframe
df_di_2 = pd.DataFrame(columns=columns) #empty dataframe

df_a = [df_ap_1, df_di_1]
df_b = [df_ap_2, df_di_2]
listDataframe = [df_a,df_b]

list_test_2 = 'foo'
listOwner = ['OWNER ONE', 'OWNER TWO']

def appendOwner(df, owner, list_test_2):
    #appends a row to a dataframe for each row in listOwner
    new_row = {'Event Date': list_test_2,
               'Site Group Name': owner,
               'Impressions': 0,
               }
    df.loc[len(df)] = new_row

for owner, dfList in zip(listOwner, listDataframe):
    for df in dfList:
        if df.empty:
            appendOwner(df, owner, list_test_2)

print(listDataframe)

您可以使用appendOwner函數將appendOwner的行追加到一個空的數據框。

暫無
暫無

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

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