[英]Pandas DataFrames in a loop, df.to_csv()
我試圖從循環中將df寫入csv,每行代表一個df,但是一旦標頭不等於所有df時,我發現有些困難,其中一些具有所有日期的值,而其他則沒有。
我正在使用類似於此功能的函數編寫df:
def write_csv():
for name, df in data.items():
df.to_csv(meal+'mydf.csv', mode='a')
並且它為每餐(午餐)創建一個csv,每個df與此類似:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
要么:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Dinner 12 10 9
我正在嘗試使用串聯的pandas,但沒有找到在函數中實現此方法的方法。 我的目標是使標頭包含所有日期(作為所需輸出的示例),而獨立於是否附加到csv的DataFrame在所有日期中都具有值。
Actual output:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
Mathew Lunch 12 11 11 10 9
Ruth Lunch 9 9 8 9
Anna Lunch 10 12 11 13 10
output with headers:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Mathew Lunch 12 11 11 10 9
Name Meal 21-03-18 22-03-18 24-03-18 25-03-18
Ruth Lunch 9 9 8 9
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Anna Lunch 10 12 11 13 10
Output desired:
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Peter Lunch 12 10 9
Mathew Lunch 12 11 11 10
Ruth Lunch 9 9 8 9
Anna Lunch 10 12 11 13 10
你可以嘗試這樣的事情嗎? 不確定是否正是您想要的,但是它將串聯數據幀而沒有完全重疊的列
def write_csv():
df2 = pd.DataFrame()
for name, df in data.items():
df2 = df2.append(df)
df2.to_csv('mydf.csv')
您可以在第一次迭代后為to_csv使用header = False標志。
def write_csv():
for i, (name, df) in enumerate(data.items()):
df.to_csv('mydf.csv', mode='a', header=(i==0))
使用以下邏輯(@saucoide),我得到了所需的輸出。
有必要創建一個空的df,然后將其填充,然后按進餐分組並打印到csv。
main_df = pd.DataFrame()
for name, df in data.items():
main_df = pd.concat([main_df, df])
main_df_group = main_df.groupby('Meal')
for name, group in main_df_group:
mydf_group = group
mydf_group.to_csv(meal+ ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.