簡體   English   中英

循環中的Pandas DataFrames,df.to_csv()

[英]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.

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