为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Jinja2 使用 GroupBy 并将 Pandas Dataframe 渲染为单独的

使用 Jinja2 使用 GroupBy 并将 Pandas Dataframe 渲染为单独的

紫衣仙女 2023-07-11 16:35:48
我的目标是获取 Pandas 数据框,按列对其进行分组,并将列中的每个组呈现为新的 HTML 文件,最终将其转换为 PDF 文件。使用链接问题中的示例数据:     Clothing  Color   Size0    Shirt     Blue    M1    Shirt     Blue    L2    Shirt     Black   L3    Pants     Black   L4    Pants     Blue    XL5    Jacket    Blue    L6    Jacket    Brown   L如果我不想为 中的每一项创建一个包含单独表格的 html 文件Clothing,而是想创建多个 html 文件&mdash;&mdash;每个文件包含一个用于一种颜色的表格:我该怎么做?此代码根据我选择的组(在本例中为 的唯一值)成功地将我的数据框呈现Color为具有多个表的单个 HTML 文件。我需要扩展代码,这意味着无需df['Color']提前对 的唯一值进行硬编码。import pandas as pdfrom jinja2 import Environmentdf = pd.DataFrame([('Shirt','Blue','M'), ('Shirt','Blue','L'), ('Shirt','Black','L'), ('Pants','Black','L'), ('Pants','Blue','XL'), ('Jacket','Blue','L'), ('Jacket','Brown','L')], columns=['Clothing', 'Color', 'Size'])env = Environment()tmpl = env.from_string( '''{% for df_split in df_splits %}<div>{{df.loc[df['Color'] == df_split].to_html()}}</div>{% endfor %}''')print(tmpl.render(df=df,df_splits = df['Color'].unique()))谢谢!
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您可以使用 . 在循环内创建文件groupby()。这是一个例子:


tmpl = env.from_string("""

    <div>

    {{ df.to_html(index=False) }}

    </div>

""")


for color_name, group_df in df.groupby(['Color']):

    content = tmpl.render(df=group_df)

    file_path = '/tmp/{f_name}.html'.format(f_name=color_name)

    with open(file_path, 'w+') as file:

        print('writing to file {f}'.format(f=file_path))

        # print(content)  # check content before write if you need

        file.write(content)


    # check content after write if you need

    # with open(file_path) as file:

    #     print('reading file {f}. content:'.format(f=file_path))

    #     print(file.read())


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信