【问题标题】:Pandas DataFrames in a loop, df.to_csv()循环中的 Pandas DataFrames,df.to_csv()
【发布时间】:2018-03-20 22:18:32
【问题描述】:

我正在尝试从循环中将 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

【问题讨论】:

  • 你能告诉我哪个是你的df吗?
  • @Djokester 目前是 tve 的实际输出。我需要有所需的输出。我正在尝试创建一个 Main_df 然后在循环结束时写入,但我有一些限制,因为我的 dfs 是每个人午餐或晚餐的 df,以及日期。

标签: python pandas dataframe concatenation export-to-csv


【解决方案1】:

你能试试这样的吗?不确定是否正是您想要的,但它会在不完全重叠列的情况下连接数据帧

def write_csv():
    df2 = pd.DataFrame()
    for name, df in data.items():
        df2 = df2.append(df)
    df2.to_csv('mydf.csv')

【讨论】:

    【解决方案2】:

    您可以在第一次迭代后为 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))
    

    【讨论】:

      【解决方案3】:

      使用以下逻辑(@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+ ...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        相关资源
        最近更新 更多