【问题标题】:Color every other 2 columns of a dataframe into an excel?将数据框的每隔 2 列着色为 excel?
【发布时间】:2021-04-16 09:53:52
【问题描述】:

我有一个巨大的数据框,我需要将它显示到一个 Excel 工作表中,这样除了第一列之外,每隔 2 列都会着色。

例如:
如果有第 1 到 100 列,
第 2,3 列必须为红色
然后 4,5 无色
然后 6,7 再次红色
然后是 8,9 无色
它一直持续到dataframe 的最后一列。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python excel dataframe xlsxwriter


【解决方案1】:

我提供了以下解决方案:

import pandas as pd 
import numpy as np


columns = 13
data = np.array([np.arange(10)]*columns).T
df = pd.DataFrame(data=data)
df = df.fillna(0) # with 0s rather than NaNs

writer = pd.ExcelWriter('pandas_conditional.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({'bg_color': '#FFC7CE'})


for col in range(2, columns+1, 4):
    worksheet.set_column(col, col + 1, cell_format=format1)
    
writer.save()

从索引 2(第二个列)迭代,直到 columns+1(索引来自 excel 中的 1),一次为 2 个列着色,然后进一步移动 4 个索引。现在唯一的问题,它为整个列着色(甚至没有填充),我稍后会寻找解决方案。

输出:

您需要使用函数将整数索引转换为类似 excel 的标签,并使用 conditional_format 以防您只想用文本为字段着色:

import pandas as pd 
import numpy as np


columns = 13
data = np.array([np.arange(10)]*columns).T
df = pd.DataFrame(data=data)
df = df.fillna(0) # with 0s rather than NaNs

writer = pd.ExcelWriter('pandas_conditional.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({'bg_color': '#FFC7CE'})

def colnum_string(n):
    string = ""
    n+=1 #just because we have index saved in first col
    while n > 0:
        n, remainder = divmod(n - 1, 26)
        string = chr(65 + remainder) + string
    return string

for col in range(2, columns+1, 4):
    str1 = colnum_string(col)+"2" #ommiting header, 1 if header
    str2 = colnum_string(col+1)+str(11) #number of rows+1 (header)
    ids = str1+":"+str2
    print(ids)
    worksheet.conditional_format(ids, {'type': 'no_blanks',
                                     'format': format1})
    
writer.save()

第二个代码的输出:

【讨论】:

    【解决方案2】:

    在 Excel 中,选择包含您的数据的列或整个电子表格。单击主页功能区上的条件格式。单击新建规则。单击使用公式确定要设置格式的单元格。在公式框中输入=OR(MOD(COLUMN(A1),4)=2,MOD(COLUMN(A1),4)=3)。单击格式按钮。选择填充选项卡。将填充颜色设置为您想要的。点击 OK 几次,您应该就完成了。

    这将填充等于或等于 2 或 3 mod 4 的单元格。

    【讨论】:

      【解决方案3】:

      你在 Excel 中做:

      1. 首先将范围转换为表格 (Ctrl+T)。

      2. 然后切换到“设计”选项卡,从“带状行”中删除一个勾号,然后选择“带状列”。

      3. 右键单击表格样式 单击重复项

      1. 点击第一列条纹
      2. 在条纹尺寸插入 2 注:您可以点击https://www.ablebits.com/office-addins-blog/2014/03/13/alternate-row-column-colors-excel/#alternating-row-tables

      【讨论】:

        【解决方案4】:

        如果你只对迭代有问题:

            for i in range(2, columns, 4):
                setColumnColor(i)
                setColumnColor(i+1)
        

        您从第 2 列开始着色,一次着色 2 列。比按 4 步迭代列。

        但是,如果您在寻找设置数据框颜色的方法时遇到问题,那么这是一个适合您的主题:Colouring one column of pandas dataframe

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-07
          • 1970-01-01
          • 1970-01-01
          • 2016-03-03
          • 1970-01-01
          • 2017-07-13
          相关资源
          最近更新 更多