Pandalar, yalnızca sütun adlarıyla boş DataFrame oluşturur


168

İ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ıyla boş bir DataFrame oluşturmak için bir çözüme ihtiyacım var.

Şimdilik böyle bir şeye sahibim:

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

Not: Sütun adlarının hala bir DataFrame'de görünmesi önemlidir.

Ama bunu böyle kullandığımda, sonuç olarak şöyle bir şey elde ediyorum:

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

"Boş DataFrame" kısmı iyidir! Ancak Dizin olayı yerine sütunları göstermem gerekiyor.

Düzenle:

Bulduğum önemli bir şey: Bu DataFrame'i Jinja2 kullanarak bir PDF'ye dönüştürüyorum, bu yüzden ilk önce bunu HTML'ye çıkarmak için bir yöntem çağırıyorum:

df.to_html()

Sanırım sütunların kaybolduğu yer burası.

Düzenleme2: Genel olarak şu örneği izledim: http://pbpython.com/pdf-reports.html . CSS de bağlantıdan. 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"])

Düzenleme3:

Veri çerçevesini oluşturulduktan hemen sonra yazdırırsam aşağıdakileri alırım:

[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 makul görünüyor, ancak template_vars'ı yazdırı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: Aşağıdakileri yazdırırsam:

print(df.to_html())

Şu sonucu zaten alıyorum:

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

Aşağıdakiler şimdi sizin için çalışıyor mu? Değilse, ortamınız hakkında daha fazla bilgi sağlamalısınız, örneğin Python sürümü, Pandas sürümü vb.
Marcus V.

Python v3.4, Pandas v0.13.1
E. Muuli kullanıyorum

1
Merhaba Eerik, E4'te sahip olduklarınızı çoğaltamıyorum. Bunu yaparsam çıktı tıpkı aşağıdaki gibi görünüyor. Pandalarınızın sürümünü güncelleyebilir misiniz? Çünkü seninki oldukça eski (0.20.1'deyim).
Marcus V.

1
Teşekkürler, Pandalar'ı güncellemek işe yaradı!
E. Muuli

Yanıtlar:


210

Sütun adları veya Dizin içeren 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: []

Veya

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üzenleme: .to_html ile yaptığınız değişikliğin ardından bile çoğaltamıyorum. 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>

Yardımcı olacaksa ana soruyu düzenledim. E: Yeniden düzenlendi.
E. Muuli

9

Bunun gibi bir şey mi arıyorsunuz?

    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')


Ayrıca, denediğimde sütun isimlerimi kaybetmedim. Bir html tablo biçimindedir.
Linda

3

df.to_html() bir sütun parametresine sahiptir.

Sadece sütunları to_html()yönteme geçirin.

df.to_html(columns=['A','B','C','D','E','F','G'])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.