У меня есть динамический DataFrame, который работает нормально, но когда нет данных для добавления в DataFrame, я получаю сообщение об ошибке. И поэтому мне нужно решение для создания пустого DataFrame только с именами столбцов.
На данный момент у меня есть что-то вроде этого:
df = pd.DataFrame(columns=COLUMN_NAMES) # Note that there are now row data inserted.
PS: важно, чтобы имена столбцов все еще появлялись в DataFrame.
Но когда я использую это так, я получаю что-то подобное в результате:
Index([], dtype='object')
Empty DataFrame
Часть "Пустой DataFrame" хороша! Но вместо «Индекса» мне все равно нужно отображать столбцы.
Редактировать:
Важная вещь, которую я обнаружил: я преобразовываю этот DataFrame в PDF, используя Jinja2, поэтому я вызываю метод для его первого вывода в HTML, например:
df.to_html()
Это где столбцы теряются, я думаю.
Edit2: в общем, я следовал этому примеру: http://pbpython.com/pdf-reports.html . Css тоже по ссылке. Вот что я делаю, чтобы отправить фрейм данных в PDF:
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template("pdf_report_template.html")
template_vars = {"my_dataframe": df.to_html()}
html_out = template.render(template_vars)
HTML(string=html_out).write_pdf("my_pdf.pdf", stylesheets=["pdf_report_style.css"])
Edit3:
Если я распечатываю фрейм данных сразу после создания, я получаю следующее:
[0 rows x 9 columns]
Empty DataFrame
Columns: [column_a, column_b, column_c, column_d,
column_e, column_f, column_g,
column_h, column_i]
Index: []
Это кажется разумным, но если я распечатаю template_vars:
'my_dataframe': '<table border="1" class="dataframe">\n <tbody>\n <tr>\n <td>Index([], dtype=\'object\')</td>\n <td>Empty DataFrame</td>\n </tr>\n </tbody>\n</table>'
И кажется, что столбцы уже отсутствуют.
E4: Если я распечатаю следующее:
print(df.to_html())
Я уже получаю следующий результат:
<table border="1" class="dataframe">
<tbody>
<tr>
<td>Index([], dtype='object')</td>
<td>Empty DataFrame</td>
</tr>
</tbody>
</table>
Ответы:
Вы можете создать пустой DataFrame с именами столбцов или индексом:
Или
Изменить: Даже после внесения изменений в .to_html я не могу воспроизвести. Это:
Производит:
источник
Вы ищете что-то подобное?
источник
df.to_html()
имеет параметр столбцов.Просто передайте столбцы в
to_html()
метод.источник