【问题标题】:Iterating over a DataFrame in ReportLab在 ReportLab 中迭代 DataFrame
【发布时间】:2015-12-03 15:13:15
【问题描述】:

我想遍历 DataFrame (df) 以为每个医院(“A”和“B”)生成 PDF。我尝试了很多方法,但除非我使用 np.random.rand(1) 将名称设为随机数,否则都没有成功,但这仍然存在问题。更新: 我希望 .pdf 的名称是每次迭代的医院名称。如果我尝试添加医院名称,则会导致错误:

当我设置时:

pdf_file_name = str(np.random.rand(1))+'.pdf'

结果是:

OSError: [Errno 22] Invalid argument: '0    A\nName: Hospital, dtype: object.pdf'

所以我需要弄清楚如何: 1.将医院名称传入文件名, 2. 遍历医院名称,为每家医院生成一份 PDF。

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.pagesizes import portrait
from reportlab.platypus import Image
import pandas as pd
import numpy as np

df = pd.DataFrame({'Hospital':['A','B']})
#This is here to just produce one report that "works" while working on the code.
df = df[(df.Hospital == 'A')]

hospital = df['Hospital']
def import_data(df):
    import numpy as np
    hospital = df['Hospital']
    pdf_file_name = str(np.random.rand(1))+'.pdf'
    generate_report(hospital, pdf_file_name)

def generate_report(hospital, pdf_file_name):
    c = canvas.Canvas(pdf_file_name, pagesize=portrait(letter))
    c.setFont('Helvetica', 48, leading=None)
    c.drawCentredString(415, 500, 'Report')
    c.setFont('Helvetica', 24, leading=None)
    c.drawCentredString(415, 450, 'This Report is For:')
    c.setFont('Helvetica-Bold', 34, leading=None)
    c.drawCentredString(415, 395, str(hospital))
    c.showPage()
    c.save()
import_data(df)

提前致谢!

【问题讨论】:

  • 抱歉,请查看更新后的代码。
  • 再次更新。现在,我相信它是最少或接近它的代码。

标签: python python-3.x pandas reportlab


【解决方案1】:

IIUC,你可以做类似的事情

def import_data(df):
    for hospital, hosp_df in df.groupby("Hospital"):
        pdf_file_name = hospital + '.pdf'
        generate_report(hospital, pdf_file_name)

df = pd.DataFrame({'Hospital':['A','B'], 'Other': [1,2]})
import_data(df)

这会为我生成两个文件,一个名为 A.pdf,第二个名为 B.pdf,每个文件都显示“Report / This Report is For: / A”(或 B)。

目前我们没有对hosp_df 做任何事情,看起来像

A
  Hospital  Other
0        A      1

B
  Hospital  Other
1        B      2

但您也可以将hosp_df 传递给generate_report,并使用该医院特定数据做任何您想做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2016-03-11
    • 1970-01-01
    • 2020-01-03
    • 2021-12-28
    • 2020-12-30
    相关资源
    最近更新 更多