【问题标题】:How to add data frames to multiple sheets in excel using python如何使用python将数据框添加到excel中的多个工作表
【发布时间】:2021-11-20 02:13:13
【问题描述】:

我正在尝试获取langs_dict 中每种语言的数据(见下文)。我想将数据添加到列表中,将该列表添加到数据框中,然后将该数据框写入 Excel 工作表。我希望所有语言都成为同一个 excel 文件的一部分,但每个语言都有自己的工作表。

下面是我的代码:

langs_dict=['ar','zh','cs','id','ja','km','ms','pt','ru','es','th','fil']
dct = {}
i = 0

while i < 13:
   for l in langs_dict:
      dct['language_%s' % l] += []
      dct['translation_%s' % l] += []
 
   #put lists in dataframe
   df1 = pd.DataFrame({'Language' : dct['language_%s' % l] } )
   df2 = pd.DataFrame({'Translation': dct['translation_%s' % l]})
 
   #concat lists     
   df = pd.concat([df1, df2])
    
   #initialize excel writer    
   writer =  pd.ExcelWriter('searches_languages.xlsx',engine='xlsxwriter')
   
   #write df to sheet
   df.to_excel(writer, sheet_name = l,index=False)

   #save
   writer.save()
   
   i+=1

正如您可能知道的那样,df.to_excel(writer, sheet_name = l,index=False) 会覆盖之前的工作表,而不是创建新工作表。有谁知道如何为每个新的 df 创建一个新工作表?

【问题讨论】:

    标签: python excel for-loop


    【解决方案1】:

    在循环外定义write

    #initialize excel writer    
    writer =  pd.ExcelWriter('searches_languages.xlsx',engine='xlsxwriter')
    while i < 13:
       for l in langs_dict:
          dct['language_%s' % l] += []
          dct['translation_%s' % l] += []
     
       #put lists in dataframe
       df1 = pd.DataFrame({'Language' : dct['language_%s' % l] } )
       df2 = pd.DataFrame({'Translation': dct['translation_%s' % l]})
     
       #concat lists     
       df = pd.concat([df1, df2])
       
       #write df to sheet
       df.to_excel(writer, sheet_name = str(i),index=False)
    
       #save
       writer.save()
       
       i+=1
    

    【讨论】:

    • stackoverflow.com/a/54237619/13960989 看看这个,以便更好地了解如何在工作簿中写入多个工作表。
    • @Aavesh Misread OP 的问题,编辑了我的答案。
    • @U12-Forward 感谢您抽出宝贵时间回答我的问题。我尝试了你的解决方案,但我仍然遇到同样的问题。每个新的df 都会覆盖同一工作表上的前一个df,而不是写入新工作表。我想我需要创建一个循环,但我不确定如何
    • @shorttriptomars 编辑了我的答案
    • @shorttriptomars 希望它有效
    【解决方案2】:

    代码中存在许多问题。主要的是 Pandas ExcelWriter 初始化和保存应该在循环之外。此外,内部 for() 循环每次只返回数组中的最后一个条目。解决这些问题会给你带来这样的结果:

    import pandas as pd
    
    langs_dict = ['ar', 'zh', 'cs', 'id', 'ja', 'km',
                  'ms', 'pt', 'ru', 'es', 'th', 'fil']
    dct = {}
    i = 0
    
    # initialize excel writer
    writer = pd.ExcelWriter('searches_languages.xlsx', engine='xlsxwriter')
    
    for i in range(len(langs_dict)):
        lang = langs_dict[i]
    
        # TODO. Fix the following to add actual data.
        dct['language_%s' % lang] = []
        dct['translation_%s' % lang] = []
    
        # put lists in dataframe
        df1 = pd.DataFrame({'Language': dct['language_%s' % lang]})
        df2 = pd.DataFrame({'Translation': dct['translation_%s' % lang]})
    
        # concat lists
        df = pd.concat([df1, df2])
    
        # write df to sheet
        df.to_excel(writer, sheet_name=lang, index=False)
    
    writer.save()
    
    

    输出:

    请注意,您必须根据您的真实数据修复 df1 和 df1 数据。在我的示例中,它们是空白的。

    【讨论】:

    • 非常感谢您抽出宝贵时间回答我的问题。你是对的,我发现了你指出的错误(见我在上面解决方案下的评论)。但我仍然非常感谢您抽出宝贵时间提供详细的解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多