Gấu trúc tạo DataFrame trống chỉ có tên cột


151

Tôi có một DataFrame động hoạt động tốt, nhưng khi không có dữ liệu nào được thêm vào DataFrame thì tôi gặp lỗi. Và do đó tôi cần một giải pháp để tạo một DataFrame trống chỉ có các tên cột.

Bây giờ tôi có một cái gì đó như thế này:

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

PS: Điều quan trọng là các tên cột vẫn sẽ xuất hiện trong DataFrame.

Nhưng khi tôi sử dụng nó như thế này, tôi nhận được một cái gì đó như thế:

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

Phần "Khung dữ liệu trống" là tốt! Nhưng thay vì điều Index tôi vẫn cần hiển thị các cột.

Biên tập:

Một điều quan trọng mà tôi phát hiện ra: Tôi đang chuyển đổi DataFrame này thành PDF bằng Jinja2, do đó, tôi đang gọi một phương thức để xuất nó thành HTML như thế sau:

df.to_html()

Đây là nơi mà các cột bị mất tôi nghĩ.

Edit2: Nói chung, tôi đã làm theo ví dụ này: http://pbpython.com/pdf-reports.html . Các css cũng từ liên kết. Đó là những gì tôi làm để gửi khung dữ liệu tới 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"])

Chỉnh sửa 3:

Nếu tôi in ra khung dữ liệu ngay sau khi tạo, tôi sẽ nhận được thông tin sau:

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

Điều đó có vẻ hợp lý, nhưng nếu tôi in ra các mẫu:

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

Và dường như các cột đã bị mất.

E4: Nếu tôi in ra như sau:

print(df.to_html())

Tôi đã nhận được kết quả sau đây:

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

Hiện tại dưới đây làm việc cho bạn? Nếu không, bạn nên cung cấp thêm thông tin về môi trường của mình, chẳng hạn như phiên bản Python, phiên bản Pandas, v.v.
Marcus V.

Tôi đang sử dụng Python v3.4, Pandas v0.13.1
E. Muuli

1
Xin chào Eerik, tôi không thể sao chép những gì bạn có trong E4. Nếu tôi làm điều này, bản in ra trông giống như những gì tôi có dưới đây. Bạn có thể cập nhật phiên bản gấu trúc của bạn? Nguyên nhân là do bạn khá già (Tôi ở mức 0,20.1).
Marcus V.

1
Cảm ơn, cập nhật Pandas đã làm việc!
E. Muuli

Câu trả lời:


190

Bạn có thể tạo một DataFrame trống với tên cột hoặc Chỉ mục:

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

Hoặc là

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]

Chỉnh sửa: Ngay cả sau khi bạn sửa đổi với .to_html, tôi không thể sao chép. Điều này:

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

Sản xuất:

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

Tôi chỉnh sửa câu hỏi chính nếu điều đó giúp. E: Chỉnh sửa lại.
E. Muuli

9

bạn đang tìm thứ gì đó như thế này phải không?

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


Ngoài ra, tôi không mất tên cột khi tôi thử. Nó là một định dạng bảng html.
Linda

3

df.to_html() có một tham số cột.

Chỉ cần truyền các cột vào to_html()phương thức.

df.to_html(columns=['A','B','C','D','E','F','G'])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.