J'ai un DataFrame dynamique qui fonctionne bien, mais lorsqu'il n'y a pas de données à ajouter dans le DataFrame, j'obtiens une erreur. Et par conséquent, j'ai besoin d'une solution pour créer un DataFrame vide avec uniquement les noms de colonne.
Pour l'instant, j'ai quelque chose comme ça:
df = pd.DataFrame(columns=COLUMN_NAMES) # Note that there are now row data inserted.
PS: Il est important que les noms de colonnes apparaissent toujours dans un DataFrame.
Mais quand je l'utilise comme ça, j'obtiens quelque chose comme ça:
Index([], dtype='object')
Empty DataFrame
La partie "DataFrame vide" est bonne! Mais au lieu de l'index, j'ai besoin de toujours afficher les colonnes.
Éditer:
Une chose importante que j'ai découverte: je convertis ce DataFrame en PDF en utilisant Jinja2, donc j'appelle une méthode pour le sortir d'abord en HTML comme ça:
df.to_html()
C'est là que les colonnes se perdent je pense.
Edit2: En général, j'ai suivi cet exemple: http://pbpython.com/pdf-reports.html . Le css provient également du lien. C'est ce que je fais pour envoyer le dataframe au 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:
Si j'imprime le dataframe juste après sa création, j'obtiens le suivant:
[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: []
Cela semble raisonnable, mais si j'imprime le 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>'
Et il semble que les colonnes manquent déjà.
E4: Si j'imprime ce qui suit:
print(df.to_html())
J'obtiens déjà le résultat suivant:
<table border="1" class="dataframe">
<tbody>
<tr>
<td>Index([], dtype='object')</td>
<td>Empty DataFrame</td>
</tr>
</tbody>
</table>