pandas 如何用相同的颜色为每3个连续的 Dataframe 行着色并将输出写入Excel文件

wqsoz72f  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(85)

在得到一个数据框架后,我想用xlsxwriter库或任何其他库为每三个连续的行的背景颜色相同的颜色我已经尝试了下一个代码,但不幸的是它给我一个单一的颜色黄色

def highlight_cells():
   return ['background-color: yellow']

字符串

35g0bw71

35g0bw711#

您可以突出显示整行或仅突出显示有值的单元格,我假设后者是首选。
此示例将dataframe按原样写入Excel,然后使用Openpyxl更改单元格的填充颜色,以避免使用Xlsxwriter阅读/重写。

import pandas as pd
from openpyxl.styles import PatternFill

### Sample dataframe
df = pd.DataFrame([['banana', 1, 'sheep', 2, 'mon', 3],
                   ['apple', 10, 'lion', 20, 'son', 30],
                   ['mango', 100, 'tiger', 200, 'father', 300],
                   ['pear', 45, 'wolf', 220, 'aunt', 302]
                   ])

sheet_name = 'Sheet1'
with pd.ExcelWriter("foo.xlsx",
                    engine='openpyxl'
                    ) as writer:
    df.to_excel(writer,
                sheet_name=sheet_name,
                header=False,
                index=False
                )

    wb = writer.book
    ws = wb[sheet_name]

    ### Set fill colour for the 3 rows to yellow
    for row in ws.iter_rows(max_row=3):
        for cell in row:
            cell.fill = PatternFill(start_color="FFFF00",
                                    end_color="FFFF00",
                                    fill_type="solid"
                                    )

字符串
示例输出
x1c 0d1x的数据
如果你的意思是你想每隔3行颜色,那么你可以删除这一行的代码

### Set fill colour for the 3 rows to yellow


并更改为以下示例代码;

*注意 * 如果您希望填充为3无填充、3无填充、3无填充而不是3无填充、3无填充,则更改行。

colour = True
colour = False

的字符串
代码样本

...
    ### Set fill colour for every 3 rows to yellow
    colour = True
    for row in ws.iter_rows():
        if colour:
            for cell in row:
                cell.fill = PatternFill(start_color="FFFF00",
                                        end_color="FFFF00",
                                        fill_type="solid")
        if row[0].row % 3 == 0:
            colour = not colour



上面的代码示例使用以下数据框架

df = pd.DataFrame([['banana', 1, 'sheep', 2, 'mom', 3],
                   ['apple', 10, 'lion', 20, 'son', 30],
                   ['mango', 100, 'tiger', 210, 'daughter', 301],
                   ['pear', 45, 'wolf', 220, 'aunt', 302],
                   ['mandarin', 56, 'goat', 230, 'uncle', 303],
                   ['orange', 12, 'horse', 240, 'grandfather', 304],
                   ['peach', 73, 'hare', 250, 'grandmother', 305],
                   ['nectarine', 91, 'emu', 260, 'sister', 306],
                   ['coconut', 134, 'piglet', 270, 'brother', 307]
                   ])

相关问题