使用for循环附加到Pandas中的空数据框

时间:2019-02-18 21:36:11

标签: python pandas dataframe iteration

我正在写这是因为我遇到了一个for循环的问题,该循环会在数据框为空时填充该数据框。不幸的是,帖子Filling empty python dataframe using loopsAppending to an empty data frame in Pandas?Creating an empty Pandas DataFrame, then filling it?并没有帮助我解决问题。

我的尝试首先是要在列表“ 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)之后,如果我调用这两个数据帧,它们仍然为空。任何想法为什么会发生以及如何克服这个问题?

更新

为了避免添加和合并,我尝试使用即将来临的尝试(同样没有成功)。

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})

两个期望的结果应该是:

enter image description here

第一个数据帧应称为df_ap_1,第二个数据帧应称为df_ap_3

谢谢。

Drigo

1 个答案:

答案 0 :(得分:0)

这是一种方法:

Description

您可以使用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) 函数将listOwner中的行追加到空数据框。