基于IF语句的Python FPDF单元格填充颜色

7kjnsjlb  于 2023-05-12  发布在  Python
关注(0)|答案(1)|浏览(191)

队员们
如何更改表格的单元格背景色。例如,我想改变B列项目的单元格背景,如果它是“否”使用FPDF和IF语句或其他方法。也就是说,如果单元格中有“否”,则“否”单元格应着色。
| 色谱柱A| B栏|
| --------------|--------------|
| 是的|不想|
| 是的|不想|

if df.Column B.any() == "No":
        pdf.set_fill_color(193, 229, 252)
        pdf.cell(30, 10, 'No', 1, 1, 'C', True)

但这并不奏效。

b09cbbtk

b09cbbtk1#

除了df.Column B中的语法错误外,df["Column B"].any()将始终返回True
您可以尝试从pandas使用iterrows

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()

pdf.set_fill_color(255, 255, 255) #make a white-bg
pdf.set_font("Arial", "B", 12) # <-- ajudst here if needed
for col in df.columns:
    pdf.cell(30, 10, col, 1, 0, "C", 1)
pdf.ln(10) #a newline

for _, row in df.iterrows():
    pdf.set_font("Arial", "", 10)  # <-- ajudst here if needed
    pdf.cell(30, 10, row["Column A"], 1, 0, "C")

    if row["Column B"] == "No":
        pdf.set_fill_color(193, 229, 252) #make a blue-bg
        pdf.cell(30, 10, row["Column B"], 1, 0, "C", 1)
    else:
        pdf.cell(30, 10, row["Column B"], 1, 0, "C")

    pdf.ln(10) #a newline

pdf.output("output.pdf", "F")

输出(.pdf):

相当于Stylerin Jupyter):

(
    df.style
     .applymap(lambda x: "background-color: #C1E5FC"
               if x == "No" else "", subset=["Column B"])
)

更新:

实际上我有四个专栏。在A列之前有2列。我如何重写pdf.cell(30,10,row[“Column A”],1)的每个列在列B之前?

for _, row in df.iterrows():
    pdf.set_font("Arial", "", 10)
    pdf.cell(30, 10, row["Column 1"], 1, 0, "C") # <-- add this line
    pdf.cell(30, 10, row["Column 2"], 1, 0, "C") # <-- add this line
    pdf.cell(30, 10, row["Column A"], 1, 0, "C")

    if row["Column B"] == "No":
        pdf.set_fill_color(193, 229, 252) #make a blue-bg
        pdf.cell(30, 10, row["Column B"], 1, 0, "C", 1)
    else:
        pdf.cell(30, 10, row["Column B"], 1, 0, "C")

    pdf.ln(10) #a newline

pdf.output("output.pdf", "F")

输出:

  • 使用的输入:*
Column 1 Column 2 Column A Column B
0        A        X      foo      Yes
1        B        Y      bar       No
2        C        Z      baz      Yes

相关问题