<i id='Y7SJ0'><tr id='Y7SJ0'><dt id='Y7SJ0'><q id='Y7SJ0'><span id='Y7SJ0'><b id='Y7SJ0'><form id='Y7SJ0'><ins id='Y7SJ0'></ins><ul id='Y7SJ0'></ul><sub id='Y7SJ0'></sub></form><legend id='Y7SJ0'></legend><bdo id='Y7SJ0'><pre id='Y7SJ0'><center id='Y7SJ0'></center></pre></bdo></b><th id='Y7SJ0'></th></span></q></dt></tr></i><div id='Y7SJ0'><tfoot id='Y7SJ0'></tfoot><dl id='Y7SJ0'><fieldset id='Y7SJ0'></fieldset></dl></div>

      • <bdo id='Y7SJ0'></bdo><ul id='Y7SJ0'></ul>
    1. <small id='Y7SJ0'></small><noframes id='Y7SJ0'>

    2. <legend id='Y7SJ0'><style id='Y7SJ0'><dir id='Y7SJ0'><q id='Y7SJ0'></q></dir></style></legend>
    3. <tfoot id='Y7SJ0'></tfoot>

        Python - 使用 pandas 格式化 Excel 单元格

        时间:2023-10-08

        <i id='WnAiD'><tr id='WnAiD'><dt id='WnAiD'><q id='WnAiD'><span id='WnAiD'><b id='WnAiD'><form id='WnAiD'><ins id='WnAiD'></ins><ul id='WnAiD'></ul><sub id='WnAiD'></sub></form><legend id='WnAiD'></legend><bdo id='WnAiD'><pre id='WnAiD'><center id='WnAiD'></center></pre></bdo></b><th id='WnAiD'></th></span></q></dt></tr></i><div id='WnAiD'><tfoot id='WnAiD'></tfoot><dl id='WnAiD'><fieldset id='WnAiD'></fieldset></dl></div>
          <tbody id='WnAiD'></tbody>
        • <bdo id='WnAiD'></bdo><ul id='WnAiD'></ul>
          <tfoot id='WnAiD'></tfoot>

          <legend id='WnAiD'><style id='WnAiD'><dir id='WnAiD'><q id='WnAiD'></q></dir></style></legend>
          • <small id='WnAiD'></small><noframes id='WnAiD'>

                • 本文介绍了Python - 使用 pandas 格式化 Excel 单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有一个 pandas 数据框,如下所示.

                  I have a pandas dataframe, which is something like shown below.

                  我想将通过/失败"列格式化为 if Fail -->红色背景,否则绿色背景,如:

                  I would like to format the column "Pass/Fail" as if Fail --> red background, else green background, like:

                  我尝试使用 Pandas 进行格式化,但无法为 Excel 添加颜色.以下是代码:

                  I have tried to use Pandas to do the formatting, but it fails to add color to the excel. Following is the code:

                  writer = pandas.ExcelWriter(destination,engine = 'xlsxwriter')
                  color = Answer.style.applymap(lambda x: 'color: red' if x == "Fail" else 'color: green',subset= pandas.IndexSlice[:,['Pass/Fail']])
                  color.to_excel(writer,'sheet1')
                  

                  我尝试了无法安装的 StyleFrame.似乎 StyleFrame 不符合我的 python 3.6 版.

                  I tried StyleFrame which failed to install. Seems that StyleFrame does not comply with my python version 3.6.

                  如何根据需要格式化 Excel?

                  How can I format the excel as I want?

                  推荐答案

                  你可以使用 conditional_format:

                  df = pd.DataFrame({'Pass/Fail':['Pass','Fail','Fail'],
                                     'expect':[1,2,3]})
                  print (df)
                    Pass/Fail  expect
                  0      Pass       1
                  1      Fail       2
                  2      Fail       3
                  
                  writer = pd.ExcelWriter('pandas_conditional.xlsx', engine='xlsxwriter')
                  df.to_excel(writer, sheet_name='Sheet1')
                  workbook  = writer.book
                  worksheet = writer.sheets['Sheet1']
                  red_format = workbook.add_format({'bg_color':'red'})
                  green_format = workbook.add_format({'bg_color':'green'})
                  
                  worksheet.conditional_format('B2:B4', {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':     'Fail',
                                                         'format': red_format})
                  
                  worksheet.conditional_format('B2:B4', {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':   'Pass',
                                                         'format':  green_format})
                  writer.save()
                  

                  更动态的解决方案 get_loc 用于 column 的位置和与 dictionary 的映射:

                  More dynamic solution with get_loc for position of column and mapping with dictionary:

                  import string
                  
                  df = pd.DataFrame({'Pass/Fail':['Pass','Fail','Fail'],
                                     'expect':[1,2,3]})
                  print (df)
                    Pass/Fail  expect
                  0      Pass       1
                  1      Fail       2
                  2      Fail       3
                  

                  <小时>

                  writer = pd.ExcelWriter('pandas_conditional.xlsx', engine='xlsxwriter')
                  df.to_excel(writer, sheet_name='Sheet1')
                  workbook  = writer.book
                  worksheet = writer.sheets['Sheet1']
                  red_format = workbook.add_format({'bg_color':'red'})
                  green_format = workbook.add_format({'bg_color':'green'})
                  
                  #dict for map excel header, first A is index, so omit it
                  d = dict(zip(range(25), list(string.ascii_uppercase)[1:]))
                  print (d)
                  {0: 'B', 1: 'C', 2: 'D', 3: 'E', 4: 'F', 5: 'G', 6: 'H', 7: 'I', 8: 'J',
                   9: 'K', 10: 'L', 11: 'M', 12: 'N', 13: 'O', 14: 'P', 15: 'Q', 16: 'R', 
                   17: 'S', 18: 'T', 19: 'U', 20: 'V', 21: 'W', 22: 'X', 23: 'Y', 24: 'Z'}
                  
                  #set column for formatting
                  col = 'Pass/Fail'
                  excel_header = str(d[df.columns.get_loc(col)])
                  #get length of df
                  len_df = str(len(df.index) + 1)
                  rng = excel_header + '2:' + excel_header + len_df
                  print (rng)
                  B2:B4
                  
                  worksheet.conditional_format(rng, {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':     'Fail',
                                                         'format': red_format})
                  
                  worksheet.conditional_format(rng, {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':   'Pass',
                                                         'format':  green_format})
                  writer.save()
                  

                  谢谢jmcnamara供评论和 XlsxWriter

                  col = 'Pass/Fail'
                  loc = df.columns.get_loc(col) + 1
                  len_df = len(df.index) + 1
                  
                  worksheet.conditional_format(1,loc,len_df,loc, {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':     'Fail',
                                                         'format': red_format})
                  
                  worksheet.conditional_format(1,loc,len_df,loc, {'type': 'text',
                                                        'criteria': 'containing',
                                                         'value':   'Pass',
                                                         'format':  green_format})
                  writer.save()
                  

                  最后一个版本的 pandas (0.20.1) 和 样式:

                  Another solution with last version of pandas (0.20.1) and styles:

                  df = pd.DataFrame({'Pass/Fail':['Pass','Fail','Fail'],
                                     'expect':['d','f','g']})
                  print (df)
                    Pass/Fail expect
                  0      Pass      d
                  1      Fail      f
                  2      Fail      g
                  
                  def f(x):
                      col = 'Pass/Fail'
                      r = 'background-color: red'
                      g = 'background-color: green'
                      c = np.where(x[col] == 'Pass', g, r)
                      y = pd.DataFrame('', index=x.index, columns=x.columns)
                      y[col] = c
                      return y
                  
                  styled = df.style.apply(f, axis=None)
                  styled.to_excel('styled.xlsx', engine='openpyxl')
                  

                  这篇关于Python - 使用 pandas 格式化 Excel 单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:字符串格式 JSON 字符串给出 KeyError 下一篇:python字符串格式抑制/静默keyerror/indexerror

                  相关文章

                  最新文章

                  <small id='Vlhwd'></small><noframes id='Vlhwd'>

                    <legend id='Vlhwd'><style id='Vlhwd'><dir id='Vlhwd'><q id='Vlhwd'></q></dir></style></legend>

                  1. <tfoot id='Vlhwd'></tfoot>

                    • <bdo id='Vlhwd'></bdo><ul id='Vlhwd'></ul>
                    1. <i id='Vlhwd'><tr id='Vlhwd'><dt id='Vlhwd'><q id='Vlhwd'><span id='Vlhwd'><b id='Vlhwd'><form id='Vlhwd'><ins id='Vlhwd'></ins><ul id='Vlhwd'></ul><sub id='Vlhwd'></sub></form><legend id='Vlhwd'></legend><bdo id='Vlhwd'><pre id='Vlhwd'><center id='Vlhwd'></center></pre></bdo></b><th id='Vlhwd'></th></span></q></dt></tr></i><div id='Vlhwd'><tfoot id='Vlhwd'></tfoot><dl id='Vlhwd'><fieldset id='Vlhwd'></fieldset></dl></div>