我正在写这是因为我遇到了一个for循环的问题,该循环会在数据框为空时填充该数据框。不幸的是,帖子Filling empty python dataframe using loops,Appending 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})
两个期望的结果应该是:
第一个数据帧应称为df_ap_1
,第二个数据帧应称为df_ap_3
。
谢谢。
Drigo
答案 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中的行追加到空数据框。