使用Python以某种格式将字典的字典写入Excel

时间:2018-10-27 11:49:41

标签: excel python-2.7

我有一些数据已经读进字典词典

编辑:发布原始数据格式

原始数据是每个用户每个月一个的excel文件

Alpha-2018年1月..以下格式

             Score
English        70
Social Science 80
Maths          90
History        45
Science        50

我将所有这些优点读入python,并将它们放入字典中,如下所述。一些学生可能会错过一些考试,因此在那几个月里他们的数据将丢失。因此,变化将是少数学生缺少的完整月份数据。

  

{alpha: {u'Jan-2018': {'Eng': '70', 'math': '90', 'sci': '50'}, u'feb-2018': {'Eng': '75', 'math': '85', 'sci': '60'}, u'mar-2018': {'Eng': '60', 'math': '92', 'sci': '40'}}

     

{beta : {u'Jan-2018': {'Eng': '30', 'math': '50', 'sci': '40'}, u'feb-2018': {'Eng': '55', 'math': '45', 'sci': '70'}, u'may-2018': {'Eng': '50', 'math': '52', 'sci': '45'}}

     

{gamma : {u'Jan-2018': {'Eng': '50', 'math': '50', 'sci': '40'}, u'feb-2018': {'Eng': '55', 'math': '75', 'sci': '40'}, u'may-2018': {'Eng': '56', 'math': '59', 'sci': '35'}}

我想以下列格式在Excel上获取这些文件。在工作表1上,它应该仅发布不同月份的Eng数据,而在工作表2的数学数据和第三次科学数据中则仅发布该数据。对于某人而言,无论哪个月份缺失数据,都应将其留空或0

Sheet1(Eng):
        Jan-2018        Feb-2018        Mar-2018        May-2018
alpha       70          75                60            0   
beta        30          55                 0            50
gamma       50          55                 0            56

与其他两张纸相似。

我尝试了以下代码,但是有两个问题:

  1. 它不考虑缺少的月份,并按顺序打印
  2. 它不会在每列顶部打印月份名称

    List1包含上述字典的字典

    alleng    = {}
    allmath   = {}
    allsci    = {}
    
    for i in list1:
        englist  = []   
        mathlist = []
        scilist  = []
    
        for m in list1[i]:
            for h in list1[i][m]:
                value1 = list1[i][m][h]
                if h == 'Eng':
                    englist.append(value1)
                if h == 'Math':
                    mathlist.append(value1)
                if h == 'Sci':
                    scilist.append(value1)
    
        alleng[i]     = englist 
        allmath[i]    = mathlist
        allsci[i]     = scilist 
    
    writer = ExcelWriter('final-sheet.xlsx')
    
    frame = pd.DataFrame.from_dict(allsci, orient='index')
    frame = frame.transpose()
    frame = frame.transpose()
    frame.to_excel(writer , sheet_name = 'Sci')
    
    frame1 = pd.DataFrame.from_dict(alleng, orient='index')
    frame1 = frame1.transpose()
    frame1 = frame1.transpose()
    frame1.to_excel(writer , sheet_name = 'Eng')
    
    frame2 = pd.DataFrame.from_dict(allmath, orient='index')
    frame2 = frame2.transpose()
    frame2 = frame2.transpose()
    frame2.to_excel(writer , sheet_name = 'Math')
    

我也尝试使用以下解决方案,但没有帮助:

Dict of dicts of dicts to DataFrame

1 个答案:

答案 0 :(得分:0)

我尝试following code将字典转换为数据框,这很有帮助

df1=pd.DataFrame(list1).stack().apply(pd.Series).unstack()

它将以以下格式在单个工作表上提供数据:

            Jan-2018   feb-2018   mar-2018  april-2018 
Eng  Alpha    70            75          60          0
     Beta     30            55          0           50
     Gamma    50            55          0           56

Math Alpha    90            85          92          0
     Beta     50            45          0           52
     Gamma    50            75          0           59