281 votes

Les pandas créent un DataFrame vide avec uniquement des noms de colonnes

J'ai une dynamique DataFrame qui fonctionne bien, mais quand il n'y a pas de données pour être ajouté dans le DataFrame j'obtiens une erreur. Et donc j'ai besoin d'une solution pour créer un vide DataFrame avec seulement les noms de colonne.

Pour l'instant j'ai quelque chose comme ceci:

df = pd.DataFrame(columns=COLUMN_NAMES) # Note that there are now row data inserted.

PS: Il est important que les noms de colonne semble toujours dans un DataFrame.

Mais quand je l'utilise comme cela je reçois quelque chose comme ça comme résultat:

Index([], dtype='object')
Empty DataFrame

Le "Vide DataFrame" la partie est du bon! Mais au lieu de l'Index, j'ai besoin de toujours afficher les colonnes.

Edit:

Une chose importante que j'ai trouvé: je suis de la conversion de cette DataFrame d'un fichier PDF à l'aide Jinja2, donc je suis à l'appel d'une méthode à la première sortie au format HTML comme ceci:

df.to_html()

C'est là que les colonnes se perdre je pense.

Edit2: En général, j'ai suivi cet exemple: http://pbpython.com/pdf-reports.html. Le css est également à partir du lien. C'est ce que je fais pour envoyer le dataframe au format 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'ai imprimer le dataframe juste après la création-je obtenir ce qui suit:

[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'ai imprimer 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 sont manquantes déjà.

E4: Si j'ai l'impression de la manière suivante:

print(df.to_html())

J'obtiens le résultat suivant déjà:

<table border="1" class="dataframe">
  <tbody>
    <tr>
      <td>Index([], dtype='object')</td>
      <td>Empty DataFrame</td>
    </tr>
  </tbody>
</table>

345voto

Marcus V. Points 1854

Vous pouvez créer un DataFrame vide avec des noms de colonne ou un index:

 In [4]: import pandas as pd
In [5]: df = pd.DataFrame(columns=['A','B','C','D','E','F','G'])
In [6]: df
Out[6]:
Empty DataFrame
Columns: [A, B, C, D, E, F, G]
Index: []
 

Ou

 In [7]: df = pd.DataFrame(index=range(1,10))
In [8]: df
Out[8]:
Empty DataFrame
Columns: []
Index: [1, 2, 3, 4, 5, 6, 7, 8, 9]
 

Edit: Même après votre amendement avec le .to_html, je ne peux pas reproduire. Ce:

 df = pd.DataFrame(columns=['A','B','C','D','E','F','G'])
df.to_html('test.html')
 

Produit:

 <table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th>D</th>
      <th>E</th>
      <th>F</th>
      <th>G</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
 

14voto

Linda Points 140

Cherchez-vous quelque chose comme ça?

     COLUMN_NAMES=['A','B','C','D','E','F','G']
    df = pd.DataFrame(columns=COLUMN_NAMES)
    df.columns

   Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
 

3voto

Eric Points 25

df.to_html () a un paramètre de colonnes.

Il suffit de passer les colonnes dans la méthode to_html ().

 df.to_html(columns=['A','B','C','D','E','F','G'])
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X