[python] 팬더 데이터 프레임 예쁜 인쇄
다음과 같이 pandas 데이터 프레임을 멋진 텍스트 기반 테이블로 어떻게 인쇄 할 수 있습니까?
+------------+---------+-------------+
| column_one | col_two | column_3 |
+------------+---------+-------------+
| 0 | 0.0001 | ABCD |
| 1 | 1e-005 | ABCD |
| 2 | 1e-006 | long string |
| 3 | 1e-007 | ABCD |
+------------+---------+-------------+
답변
저는 그 요구에 맞는 훌륭한 도구를 찾았습니다 . tabulate 라고 합니다.
표 형식의 데이터를 인쇄하고 DataFrame
.
from tabulate import tabulate
import pandas as pd
df = pd.DataFrame({'col_two' : [0.0001, 1e-005 , 1e-006, 1e-007],
'column_3' : ['ABCD', 'ABCD', 'long string', 'ABCD']})
print(tabulate(df, headers='keys', tablefmt='psql'))
+----+-----------+-------------+
| | col_two | column_3 |
|----+-----------+-------------|
| 0 | 0.0001 | ABCD |
| 1 | 1e-05 | ABCD |
| 2 | 1e-06 | long string |
| 3 | 1e-07 | ABCD |
+----+-----------+-------------+
노트 :
모든 유형의 데이터에 대한 행 인덱스를 제외하려면
showindex="never"
또는을 전달하십시오showindex=False
.
답변
간단한 접근 방식은 pandas가 즉시 수행 하는 html로 출력하는 것입니다 .
df.to_html('temp.html')
답변
판다> = 1.0
내장 함수가 데이터를 일부 github 마크 다운으로 덤프하려면 이제 하나가 있습니다. 보세요 to_markdown
:
df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])
print(df.to_markdown())
| | A | B |
|:---|----:|----:|
| a | 1 | 1 |
| a | 2 | 2 |
| b | 3 | 3 |
다음은 github에서 어떻게 보이는지입니다.
여전히 tabulate
패키지를 설치 해야합니다 .
답변
Jupyter 노트북을 사용하는 경우 다음 코드를 실행하여 올바른 형식의 테이블에 데이터 프레임을 대화식으로 표시 할 수 있습니다.
이 답변은 위의 to_html ( ‘temp.html’) 답변을 기반으로하지만 파일을 만드는 대신 노트북에 올바른 형식의 테이블을 직접 표시합니다.
from IPython.display import display, HTML
display(HTML(df.to_html()))
이 코드에 대한 크레딧 : iPython Notebook의 테이블로 DataFrame 표시
답변
prettytable 을 사용하여 테이블을 텍스트로 렌더링 할 수 있습니다 . 트릭은 data_frame을 메모리 내 csv 파일로 변환하고 꽤 잘 읽도록하는 것입니다. 코드는 다음과 같습니다.
from StringIO import StringIO
import prettytable
output = StringIO()
data_frame.to_csv(output)
output.seek(0)
pt = prettytable.from_csv(output)
print pt
답변
나는 잠시 동안 Ofer의 대답을 사용했으며 대부분의 경우 훌륭하다는 것을 알았습니다. 안타깝게도 pandas의 to_csv 와 prettytable 의 from_csv 사이 의 불일치로 인해 prettytable을 다른 방식으로 사용해야했습니다.
실패 사례 중 하나는 쉼표가 포함 된 데이터 프레임입니다.
pd.DataFrame({'A': [1, 2], 'B': ['a,', 'b']})
Prettytable은 다음과 같은 형식의 오류를 발생시킵니다.
Error: Could not determine delimiter
다음 함수는이 경우를 처리합니다.
def format_for_print(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
색인에 관심이 없으면 다음을 사용하십시오.
def format_for_print2(df):
table = PrettyTable(list(df.columns))
for row in df.itertuples():
table.add_row(row[1:])
return str(table)
답변
Mark의 답변에 따라 어떤 이유로 Jupyter를 사용 하지 않는 경우 ( 예 : 콘솔에서 빠른 테스트를 수행하려는 경우) DataFrame.to_string
적어도 Pandas 0.12 (2014)부터 작동 하는 방법을 사용할 수 있습니다. .
import pandas as pd
matrix = [(1, 23, 45), (789, 1, 23), (45, 678, 90)]
df = pd.DataFrame(matrix, columns=list('abc'))
print(df.to_string())
# outputs:
# a b c
# 0 1 23 45
# 1 789 1 23
# 2 45 678 90