팬더는 열 이름만으로 빈 DataFrame을 만듭니다.


151

동적으로 작동하는 동적 DataFrame이 있지만 DataFrame에 추가 할 데이터가 없으면 오류가 발생합니다. 따라서 열 이름만으로 빈 DataFrame을 만드는 솔루션이 필요합니다.

지금은 다음과 같은 것이 있습니다.

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

추신 : 열 이름이 여전히 DataFrame에 나타나는 것이 중요합니다.

그러나 이것을 이와 같이 사용하면 결과적으로 이와 같은 것을 얻습니다.

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

"빈 데이터 프레임"부분이 좋습니다! 그러나 색인 대신 열을 계속 표시해야합니다.

편집하다:

중요한 사실 : Jinja2를 사용 하여이 DataFrame을 PDF로 변환하므로 먼저 HTML로 출력하는 방법을 호출합니다.

df.to_html()

이것은 열이 사라지는 곳이라고 생각합니다.

Edit2 : 일반적으로 http://pbpython.com/pdf-reports.html 예제를 따랐습니다 . CSS는 또한 링크에서 온 것입니다. 그것이 데이터 프레임을 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"])

편집 3 :

생성 직후에 데이터 프레임을 인쇄하면 다음과 같은 결과가 나타납니다.

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

합리적인 것처럼 보이지만 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>'

그리고 열이 이미 누락 된 것 같습니다.

E4 : 다음을 인쇄하면

print(df.to_html())

다음과 같은 결과가 이미 나타납니다.

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

아래는 이제 당신을 위해 작동합니까? 그렇지 않은 경우 Python 버전, Pandas 버전 등과 같은 환경에 대한 자세한 정보를 제공해야합니다.
Marcus V.

저는 Python v3.4, Pandas v0.13.1
E. Muuli

1
안녕 Eerik, 나는 당신이 E4에 가지고있는 것을 재현 할 수 없습니다. 이 작업을 수행하면 인쇄물이 아래에있는 것처럼 보입니다. 팬더 버전을 업데이트 할 수 있습니까? 당신의 것이 다소 오래 되었기 때문에 (나는 0.20.1입니다).
Marcus V.

1
감사합니다. Pandas 업데이트가 효과가있었습니다!
E. Muuli

답변:


190

열 이름이나 인덱스를 사용하여 빈 DataFrame을 만들 수 있습니다.

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

또는

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]

편집 : .to_html로 수정 한 후에도 재현 할 수 없습니다. 이:

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

생산 :

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

도움이된다면 주요 질문을 편집했습니다. E : 다시 편집했습니다.
E. Muuli

9

이런 것을 찾고 있습니까?

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


또한 시도 할 때 열 이름을 잃지 않습니다. html 테이블 형식입니다.
Linda

3

df.to_html() 열 매개 변수가 있습니다.

열을 to_html()메소드에 전달하십시오 .

df.to_html(columns=['A','B','C','D','E','F','G'])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.