전체 Pandas Series / DataFrame을 예쁘게 인쇄


650

터미널에서 Series 및 DataFrames를 많이 사용합니다. __repr__시리즈 의 기본값 은 일부 헤드 및 테일 값이 있지만 나머지는 누락 된 축소 샘플을 반환합니다.

Series / DataFrame 전체를 예쁘게 인쇄 할 수있는 방법이 있습니까? 이상적으로는 적절한 정렬, 아마도 열 사이의 경계 및 다른 열의 색상 코딩을 지원할 것입니다.


19
감소 된 출력은 pd.set_option('display.max_rows', 1000)예를 들어 변경하여 사용할 수있는 기본 옵션으로 인한 것입니다. 색칠은 다른 것입니다 .html repr 출력 색상 지정에 대해 이야기한다고 가정합니다. 나는 이것이 전혀 내장되어 있지 않다고 생각합니다.
EdChum

2
@ EdChum : 고마워, 나는 이것 display.max_rows에 대해 알고 있었고 , 문제는 대부분 출력을 자르기를 원한다는 것입니다. 때로는 전체 출력을보고 싶을 때가 있습니다. 옵션을 매우 높은 값으로 설정하고 기본값 __repr__을 사용한 다음 값을 되돌릴 수는 있지만 다소 번거로울 수 있습니다.이 경우 자체 인쇄 기능을 작성할 수도 있습니다.
Dun Peal

1
@ EdChum : 색상 관련-이것은 색상 터미널이므로 값을 쉽게 구별하기 위해 각 행을 다른 색상으로 인쇄하는 것이 좋습니다. Pandas는 색상을 포함한 고급 터미널 기능을 사용하는 ipython과 잘 작동하므로 Pandas에 색상 기능이 있는지 궁금합니다.
Dun Peal

1
터미널 쉘로 IPython 대신 IPython Notebook에서 Pandas를 사용 set_option합니다. 채색을 지원하는 옵션이 보이지 않습니다. 어쩌면 일부 CSS 또는 출력 형식을 적용하기 위해 플러그인으로 수행 할 수있는 것일 수도 있습니다. 이것이 내가 달성 할 수있는 유일한 방법입니다
EdChum

답변:


862

option_context하나 이상의 옵션과 함께을 사용할 수도 있습니다.

with pd.option_context('display.max_rows', None, 'display.max_columns', None):  # more options can be specified also
    print(df)

옵션이 자동으로 이전 값으로 돌아갑니다.

jupyter-notebook에서 작업하는 경우 display(df)대신 print(df)jupyter 리치 디스플레이 로직을 사용하십시오. (지금처럼) .


2
감사합니다! 최대 값을 설정하면 None해제됩니다. 은 Using with pd.option_context()매우 명확하고 명시 적으로 벌어지고 어떤 옵션 문서를, 그리고 출력의 다른 변경 예를 들어, 그이 바람직 할 수있다 서식을 사용하여 달성하는 방법을 취소하게 precision, max_colwidth, expand_frame_repr, colheader_justify, date_yearfirst, encoding, 그리고 많은 더 많은 : pandas.pydata.org/pandas를 -docs / 안정적 / options.html
nealmcb

37
궁금 누가 누군가를 위해 : jupyter를 사용하는 경우, 사용 display(df)대신에print(df)
tsvikas

3
여기 나타내는 3 무엇인가?
Mona Jalal

1
DataFrame 정말 큰 경우, 그것은 의미가 일시적으로 .CSV로 작성하고 Jupyter 랩의 빠른 CSV 뷰어 사용할 수 있습니다

option.context 매개 변수를 기본값으로 설정하려면 display.max_columns의 '3'은 'None'이어야합니다. 결정된.
Trutane

605

설정을 해킹 할 필요가 없습니다. 간단한 방법이 있습니다.

print(df.to_string())

1
열이 몇 개입니까? 1300 열을 확인한 결과 제대로 작동합니다. itertools에서 문자열 가져 오기에서 ascii_letters df = pd.DataFrame (data = [[0] * 1326], index = [0], columns = [(a + b) A에 대한, 조합 B (ascii_letters 2)])
안드레이 Shokhin

11
은 Using with pd.option_context()훨씬 더 명확하고 명시 적으로 벌어지고 어떤 옵션 문서를, 그리고 출력에 다른 변화, 즉이 바람직 할 수있다 서식 예를 들어, 사용 달성하는 방법을 취소하게 precision, max_colwidth, expand_frame_repr, colheader_justify, date_yearfirst, encoding, 그리고 많은 더 많은 : pandas.pydata.org/를 pandas-docs / stable / options.html
nealmcb

2
열이 많고 화면이 열을 표시하기에 충분하지 않은 경우 예제에서 이상하게 보이기 때문에 다른 답변을 선호합니다. 열 이름과 데이터는 별도의 줄 바꿈을 수행하므로 더 이상 어떤 데이터가 어떤 열 이름에 속하는지 쉽게 알 수 없습니다.
Dremet

9
질문자는 "pretty-print"솔루션을 요청했습니다. 이것은 아닙니다 . Jupyter Notebook 내에서 사용 된 경우 내장 된 예쁜 디스플레이가 전혀 사용되지 않습니다. pd.set_option('display.max_rows', None)인쇄 직전 에 사용하는 것이 좋습니다 df.
LS

@LS는 python 3.x Jupyter 노트북에서 pd.set_option ( 'display.max_rows', None) 및 df.to_string ()을 모두 테스트했으며 인쇄시 동일한 출력을 생성했습니다. 위의 답변이 이전 버전에서 작동하지 않으면 지금 작동합니다.
H Froedge

166

물론, 이것이 많이 나오면 이와 같은 기능을하십시오. IPython을 시작할 때마다로드되도록 구성 할 수도 있습니다. https://ipython.org/ipython-doc/1/config/overview.html

def print_full(x):
    pd.set_option('display.max_rows', len(x))
    print(x)
    pd.reset_option('display.max_rows')

채색에 관해서는 색상을 너무 정교하게 만드는 것이 나에게는 역효과가 있지만 부트 스트랩.table-striped 과 같은 것이 좋을 것입니다. 이 기능을 제안하기 위해 항상 문제만들 수 있습니다.


5
연결이 끊어졌습니다. 아마도 ipython.org/ipython-doc/dev/config/intro.html이어야 합니까?
ostrokach

2
누군가, 누군가, 심지어 저자조차도 링크를 확인하고 수정하고 이러한 주석을 쓸모없는 것으로 표시하면 좋을 것입니다.
Aaron Hall

인쇄 작업 전에 옵션이 기본값으로 설정되어 있다고 가정하기 때문에 이는 나쁘지 않으므로 예기치 않은 동작이 발생할 수 있습니다. with 문과 함께 옵션 컨텍스트를 사용하는 것이 더 강력한 옵션이며 이전에 설정된 모든 항목으로 되돌아갑니다.
inVader

104

컨텍스트 관리자를 사용하는 대신 팬더를 가져온 후 전체 데이터 프레임을 표시하기위한 옵션 을 설정하십시오 .

pd.set_option('display.max_columns', None)  # or 1000
pd.set_option('display.max_rows', None)  # or 1000
pd.set_option('display.max_colwidth', -1)  # or 199

유용한 옵션의 전체 목록은 다음을 참조하십시오.

pd.describe_option('display')

1
이것을 추가해 주셔서 감사합니다. 둘 이상의 데이터 프레임을 표시하려는 경우 "없음"이 각 단일 데이터 프레임의 실제 길이보다 훨씬 낫습니다.
Dremet

5
@Corrumpo 일부 옵션 -1None경우 전체 표현을 원할 경우 대신 int 값 을 사용해야합니다.
lucidyan

display.옵션 이름의 접두사 는 필요하지 않은 것 같습니다. 예를 들어, set_option('max_columns')동일하게 작동합니다.
Acumenus

고마워요 :)
Orsiris de Jong

45

표 패키지를 사용하십시오.

pip install tabulate

다음 예제 사용법을 고려하십시오.

import pandas as pd
from io import StringIO
from tabulate import tabulate

c = """Chromosome Start End
chr1 3 6
chr1 5 7
chr1 8 9"""

df = pd.read_table(StringIO(c), sep="\s+", header=0)

print(tabulate(df, headers='keys', tablefmt='psql'))

+----+--------------+---------+-------+
|    | Chromosome   |   Start |   End |
|----+--------------+---------+-------|
|  0 | chr1         |       3 |     6 |
|  1 | chr1         |       5 |     7 |
|  2 | chr1         |       8 |     9 |
+----+--------------+---------+-------+

pd.Series를 인쇄 할 때 테이블 형식으로 연결됩니다.
eliu

2
@eliu 정보 주셔서 감사합니다. 당신은 항상pd_series.to_frame()
불행한 고양이

20

Ipython Notebook (Jupyter)을 사용중인 경우 HTML을 사용할 수 있습니다

from IPython.core.display import HTML
display(HTML(df.to_html()))

1
다른 솔루션 인 Tnx와 비교하기위한 출력을 보여주십시오.
vwvan

7
이것으로 큰 데이터 프레임을 보여 주려고 조심하십시오. .ipyndb 파일에서 원시 코드를 편집하지 않으면 메모리가 부족하여 노트북을 다시 열 수 없습니다. True story;)
FLBKernel 10

이것은 나에게 가장 적합한 옵션입니다. 표가 채색으로 전체 표시됩니다. 좋은 것!
Ololade

20

사용 pd.options.display

이 답변은 lucidyan에 의한 이전 답변 의 변형입니다 . 의 사용을 피함으로써 코드를 더 읽기 쉽게 만듭니다 set_option.

컨텍스트 관리자를 사용하는 대신 팬더를 가져온 후 큰 데이터 프레임을 표시하기위한 옵션 을 설정하십시오 .

def set_pandas_display_options() -> None:
    # Ref: https://stackoverflow.com/a/52432757/
    display = pd.options.display

    display.max_columns = 1000
    display.max_rows = 1000
    display.max_colwidth = 199
    display.width = None
    # display.precision = 2  # set as needed

set_pandas_display_options()

이 후에 는 노트북을 사용하는 경우 display(df)또는 df노트북을 사용하는 경우에만 사용할 수 있습니다 print(df).

사용 to_string

Pandas 0.25.3에는 서식 옵션을 허용하는 메소드 DataFrame.to_stringSeries.to_string메소드가 있습니다.

사용 to_markdown

필요한 것은 마크 다운 출력 인 경우 Pandas 1.0.0에는 DataFrame.to_markdownSeries.to_markdown메소드가 있습니다.

사용 to_html

HTML 출력이 필요한 경우 Pandas 0.25.3에는 DataFrame.to_html메소드 가 있지만는 없습니다 Series.to_html. 참고는이 것을 Series할 수 있습니다 변환 된 A와 DataFrame.


예, 이것은 set_option 대신 Jupyter에 표시하는 더 좋은 방법으로 보입니다. 표시된 출력을 왼쪽 정렬하는 방법이 있습니까? 표시된 데이터 프레임의 오른쪽 행은 기본적으로 오른쪽으로 정렬됩니다.
vinsinraw

11

이 시도

pd.set_option('display.height',1000)
pd.set_option('display.max_rows',500)
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)

3

아래 방법을 사용하여이를 달성 할 수 있습니다. 총계를 통과하십시오. DataFrame에 존재하는 열의 수

'display.max_columns'

예를 들어 :

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)

-1

display () 함수를 사용해보십시오. 가로 및 세로 스크롤 막대가 자동으로 사용되므로 print () 대신 다른 데이터 세트를 쉽게 표시 할 수 있습니다.

display(dataframe)

display ()도 적절한 정렬을 지원합니다.

그러나 데이터 셋을 더 아름답게 만들고 싶다면 확인할 수 있습니다 pd.option_context(). 데이터 프레임을 명확하게 표시하는 많은 옵션이 있습니다.

참고-Jupyter Notebook을 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.