Eu tenho um DataFrame dinâmico que funciona bem, mas quando não há dados a serem adicionados ao DataFrame, recebo um erro. E, portanto, preciso de uma solução para criar um DataFrame vazio com apenas os nomes das colunas.
Por enquanto, tenho algo parecido com isto:
df = pd.DataFrame(columns=COLUMN_NAMES) # Note that there are now row data inserted.
PS: é importante que os nomes das colunas ainda apareçam em um DataFrame.
Mas quando eu uso assim, recebo algo assim como resultado:
Index([], dtype='object')
Empty DataFrame
A parte "Empty DataFrame" é boa! Mas, em vez da coisa do Índice, ainda preciso exibir as colunas.
Editar:
Uma coisa importante que eu descobri: estou convertendo esse DataFrame em um PDF usando o Jinja2, portanto, estou chamando um método para o primeiro gerar como HTML:
df.to_html()
É aqui que as colunas se perdem, eu acho.
Edit2: Em geral, segui este exemplo: http://pbpython.com/pdf-reports.html . O css também é do link. É o que faço para enviar o quadro de dados para o 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:
Se eu imprimir o dataframe logo após a criação, obtenho o seguinte:
[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: []
Isso parece razoável, mas se eu imprimir os 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>'
E parece que as colunas já estão faltando.
E4: Se eu imprimir o seguinte:
print(df.to_html())
Já recebo o seguinte resultado:
<table border="1" class="dataframe">
<tbody>
<tr>
<td>Index([], dtype='object')</td>
<td>Empty DataFrame</td>
</tr>
</tbody>
</table>