Как приблизить список фреймов данных к html (как выполнить итерацию в html-коде)?

#python #html #pandas #dataframe

Вопрос:

У меня есть фреймы данных serveral pandas в списке. Итак, у меня есть несколько кадров данных (df[0], df[1]). Каждый кадр данных, который я хочу записать в html.

HTML-код в файле python выглядит следующим образом:

 html = f'''  lt;htmlgt;  lt;headgt;  titlegt;{"test"}lt;/titlegt;  lt;/headgt;  lt;bodygt;  lt;pgt;{"just a test sentence"}lt;/pgt;  lt;bodygt;  lt;htmlgt; '''  

Написать просто обычный df довольно просто ({df.head(5).to_html()}):

 html = f'''  lt;htmlgt;  lt;headgt;  titlegt;{"test"}lt;/titlegt;  lt;/headgt;  lt;bodygt;  lt;pgt;{"just a test sentence"}lt;/pgt;  {df.head(5).to_html()}  lt;bodygt;  lt;htmlgt; '''  

Как подойти к этому в моем случае, когда у меня есть df[0], df[1] и так далее. Как перебрать список df в html, чтобы показать каждый из них друг среди друга? Конечно, я просто могу использовать {df[0].head(5).to_html()}. Но я не знаю, сколько кадров данных в списке, и поэтому я должен использовать, например, цикл for. Но я не знаю, как вставить цикл for в html-код. Спасибо

Комментарии:

1. Покажите ожидаемый результат , попытаемся разобраться и данные в каком формате

Ответ №1:

Я предполагаю, что вы хотите объединить HTML-строки всех фреймов данных в один.

Просто создайте функцию, которая создает HTML-код для данного фрейма данных

 def df_to_html(df):  return f'''  lt;htmlgt;  lt;headgt;  lt;titlegt;{"test"}lt;/titlegt;  lt;/headgt;  lt;bodygt;  lt;pgt;{"just a test sentence"}lt;/pgt;  {df.head(5).to_html()}  lt;bodygt;  lt;htmlgt;'''  

Затем выполните итерацию по списку кадров данных, вызовите функцию для каждого из них и, наконец, используйте str.join для объединения полученных HTML-кодов.

 import numpy as np import pandas as pd  # Create a list of 3 random DataFrames with shape (10, 3) # just for the sake of example df_list = [pd.DataFrame(np.random.randint(10, size=(10,3)),   columns=list("ABC"))   for _ in range(3)]  # iterate over the dfs, generate the HTML, and concatenate the results all_df_html = "".join(df_to_html(df) for df in df_list)  gt;gt;gt; print(all_df_html)  
 lt;htmlgt;  lt;headgt;  lt;titlegt;testlt;/titlegt; lt;/headgt;  lt;bodygt;  lt;pgt;just a test sentencelt;/pgt;  lt;table border="1" class="dataframe"gt;  lt;theadgt;  lt;tr style="text-align: right;"gt;  lt;thgt;lt;/thgt;  lt;thgt;Alt;/thgt;  lt;thgt;Blt;/thgt;  lt;thgt;Clt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  lt;trgt;  lt;thgt;0lt;/thgt;  lt;tdgt;9lt;/tdgt;  lt;tdgt;6lt;/tdgt;  lt;tdgt;6lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;1lt;/thgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;0lt;/tdgt;  lt;tdgt;8lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;2lt;/thgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;6lt;/tdgt;  lt;tdgt;4lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;3lt;/thgt;  lt;tdgt;7lt;/tdgt;  lt;tdgt;5lt;/tdgt;  lt;tdgt;2lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;4lt;/thgt;  lt;tdgt;1lt;/tdgt;  lt;tdgt;9lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;   lt;bodygt;  lt;htmlgt;  lt;htmlgt;   lt;headgt;  lt;titlegt;testlt;/titlegt;  lt;/headgt;   lt;bodygt;  lt;pgt;just a test sentencelt;/pgt;  lt;table border="1" class="dataframe"gt;  lt;theadgt;  lt;tr style="text-align: right;"gt;  lt;thgt;lt;/thgt;  lt;thgt;Alt;/thgt;  lt;thgt;Blt;/thgt;  lt;thgt;Clt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  lt;trgt;  lt;thgt;0lt;/thgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;2lt;/tdgt;  lt;tdgt;3lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;1lt;/thgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;6lt;/tdgt;  lt;tdgt;3lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;2lt;/thgt;  lt;tdgt;0lt;/tdgt;  lt;tdgt;8lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;3lt;/thgt;  lt;tdgt;6lt;/tdgt;  lt;tdgt;7lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;4lt;/thgt;  lt;tdgt;9lt;/tdgt;  lt;tdgt;5lt;/tdgt;  lt;tdgt;3lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;   lt;bodygt;  lt;htmlgt;  lt;htmlgt;   lt;headgt;  lt;titlegt;testlt;/titlegt;  lt;/headgt;   lt;bodygt;  lt;pgt;just a test sentencelt;/pgt;  lt;table border="1" class="dataframe"gt;  lt;theadgt;  lt;tr style="text-align: right;"gt;  lt;thgt;lt;/thgt;  lt;thgt;Alt;/thgt;  lt;thgt;Blt;/thgt;  lt;thgt;Clt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  lt;trgt;  lt;thgt;0lt;/thgt;  lt;tdgt;7lt;/tdgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;3lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;1lt;/thgt;  lt;tdgt;1lt;/tdgt;  lt;tdgt;9lt;/tdgt;  lt;tdgt;7lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;2lt;/thgt;  lt;tdgt;4lt;/tdgt;  lt;tdgt;0lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;3lt;/thgt;  lt;tdgt;0lt;/tdgt;  lt;tdgt;7lt;/tdgt;  lt;tdgt;9lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;thgt;4lt;/thgt;  lt;tdgt;6lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;tdgt;1lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;   lt;bodygt;  lt;htmlgt; 

Комментарии:

1. Спасибо за помощь. Как можно дать другой тип вывода ТОЛЬКО для цикла № 1? Поэтому я имею в виду: не использовать «просто тестовое предложение» для первого цикла, а, например, «это первое предложение».