İyi çalışan dinamik bir DataFrame'im var, ancak DataFrame'e eklenecek veri olmadığında bir hata alıyorum. Bu nedenle, yalnızca sütun adlarını içeren boş bir DataFrame oluşturmak için bir çözüme ihtiyacım var.
Şimdilik şöyle bir şey var:
df = pd.DataFrame(columns=COLUMN_NAMES) # Note that there are now row data inserted.
Not: Sütun adlarının bir DataFrame içinde görünmeye devam etmesi önemlidir.
Ancak bu şekilde kullandığımda sonuç olarak buna benzer bir şey elde ediyorum:
Index([], dtype='object')
Empty DataFrame
Boş DataFrame" kısmı iyi! Ancak Index yerine hala sütunları görüntülemem gerekiyor.
Düzenle:
Öğrendiğim önemli bir şey var: Bu DataFrame'i Jinja2 kullanarak bir PDF'e dönüştürüyorum, bu nedenle ilk olarak HTML'e çıktı vermek için bir yöntem çağırıyorum:
df.to_html()
Bence sütunların kaybolduğu yer burası.
Edit2: Genel olarak şu örneği izledim: http://pbpython.com/pdf-reports.html. Css de bağlantıdan alınmıştır. Veri çerçevesini PDF'ye göndermek için yaptığım şey bu:
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:
Veri çerçevesini oluşturduktan hemen sonra yazdırırsam aşağıdakileri elde ederim:
[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: []
Bu mantıklı görünüyor, ancak template_vars çıktısını alırsam:
'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>'
Görünüşe göre sütunlar zaten eksik.
E4: Eğer aşağıdakileri yazdırırsam:
print(df.to_html())
Şimdiden aşağıdaki sonucu alıyorum:
<table border="1" class="dataframe">
<tbody>
<tr>
<td>Index([], dtype='object')</td>
<td>Empty DataFrame</td>
</tr>
</tbody>
</table>
Sütun adları veya bir Dizin ile boş bir DataFrame oluşturabilirsiniz:
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: []
Ya da
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]
Düzenle: .to_html ile yaptığınız değişiklikten sonra bile yeniden üretemiyorum. Bu:
df = pd.DataFrame(columns=['A','B','C','D','E','F','G'])
df.to_html('test.html')
Üretir:
<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>