Panda membuat DataFrame kosong dengan hanya nama kolom

151

Saya memiliki DataFrame dinamis yang berfungsi dengan baik, tetapi ketika tidak ada data untuk ditambahkan ke dalam DataFrame saya mendapatkan kesalahan. Dan karena itu saya membutuhkan solusi untuk membuat DataFrame kosong dengan hanya nama kolom.

Untuk saat ini saya memiliki sesuatu seperti ini:

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

PS: Penting bahwa nama kolom masih akan muncul dalam DataFrame.

Tetapi ketika saya menggunakannya seperti ini saya mendapatkan sesuatu seperti itu sebagai hasilnya:

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

Bagian "Empty DataFrame" bagus! Tapi alih-alih hal Indeks saya harus tetap menampilkan kolom.

Edit:

Suatu hal penting yang saya temukan: Saya mengubah DataFrame ini ke PDF menggunakan Jinja2, jadi karena itu saya memanggil metode untuk pertama-tama output ke HTML seperti itu:

df.to_html()

Di sinilah kolom tersesat saya pikir.

Sunting2: Secara umum, saya mengikuti contoh ini: http://pbpython.com/pdf-reports.html . Css juga dari tautan. Itulah yang saya lakukan untuk mengirim kerangka data ke 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"])

Sunting3:

Jika saya mencetak kerangka data tepat setelah pembuatan saya mendapatkan tindak lanjutnya:

[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: []

Tampaknya masuk akal, tetapi jika saya mencetak 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>'

Dan sepertinya kolom sudah hilang.

E4: Jika saya mencetak yang berikut ini:

print(df.to_html())

Saya sudah mendapatkan hasil berikut:

<table border="1" class="dataframe">
  <tbody>
    <tr>
      <td>Index([], dtype='object')</td>
      <td>Empty DataFrame</td>
    </tr>
  </tbody>
</table>
E. Muuli
sumber
Apakah di bawah ini sekarang bekerja untuk Anda? Jika tidak, Anda harus memberikan informasi lebih lanjut tentang lingkungan Anda, seperti versi Python, versi Pandas, dll.
Marcus V.
Saya menggunakan Python v3.4, Pandas v0.13.1
E. Muuli
1
Hai Eerik, saya tidak dapat mereproduksi apa yang Anda miliki di E4. Jika saya melakukan ini, hasil cetaknya terlihat seperti apa yang saya miliki di bawah ini. Bisakah Anda memperbarui versi panda Anda? Karena milikmu agak tua (aku di 0.20.1).
Marcus V.
1
Terima kasih, memperbarui Panda berfungsi!
E. Muuli

Jawaban:

190

Anda bisa membuat DataFrame kosong dengan nama kolom atau Indeks:

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: []

Atau

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]

Sunting: Bahkan setelah amandemen Anda dengan .to_html, saya tidak dapat mereproduksi. Ini:

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

Menghasilkan:

<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>
Marcus V.
sumber
Saya mengedit pertanyaan utama jika itu membantu. E: Diedit lagi.
E. Muuli
9

Apakah Anda mencari sesuatu seperti ini?

    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')
Linda
sumber
Juga, saya tidak kehilangan nama kolom saya ketika saya mencoba. Ini dalam format tabel html.
Linda
3

df.to_html() memiliki parameter kolom.

Cukup lewati kolom ke dalam to_html()metode.

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