我的目标是获取 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 文件——每个文件包含一个用于一种颜色的表格:我该怎么做?此代码根据我选择的组(在本例中为 的唯一值)成功地将我的数据框呈现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())
添加回答
举报
0/150
提交
取消