Pandas 데이터 프레임에서 매우 긴 문자열을 완전히 인쇄하십시오.


116

나는 겉보기에 매우 간단한 일로 어려움을 겪고 있습니다. 매우 긴 문자열을 포함하는 팬더 데이터 프레임이 있습니다.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

이제 동일한 인쇄를 시도 할 때 전체 문자열이 표시되지 않고 문자열의 일부만 표시됩니다.

나는 다음 옵션을 시도했다

  • 사용 print(df.iloc[2])
  • 사용 to_html
  • 사용 to_string
  • stackoverflow 답변 중 하나는 pandas 표시 옵션을 사용하여 열 너비를 늘리도록 제안했지만 작동하지 않았습니다.
  • 나는 또한 set_printoptions나를 도울 방법 을 얻지 못했습니다 .

어떤 아이디어라도 감사합니다. 매우 간단 해 보이지만 얻을 수 없습니다!

답변:


176

를 사용 options.display.max_colwidth하여 기본 표현에서 더 많이 보도록 지정할 수 있습니다 .

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

실제로 하나의 값을 검사하려는 경우 (행이 아닌 스칼라로) 액세스 df.iloc[2]하여 전체 문자열도 볼 수 있습니다.

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

2
df.iloc [2,0]-작동하지 않음-첫 번째와 세 번째 행을 인쇄하고 cutted (
Rocketq

세 번째 행과 첫 번째 열의 요소를 원한다면 작동합니다. 다른 것을 원하시면 새로운 질문을여십시오.
joris

작동합니다, thx! 1 열에 우편 번호 목록이 있고 apply를 사용하여 함수를 사용하여 최소 및 최대 열을 현명하게 찾습니다. df [ 'zipcodeMinMax'] = df.loc [:, [ 'zipcodeList']]. apply (createMinMaxZipcode, axis = 1). 따라서 함수 내에서 시리즈에 대해 to_string을 수행합니다 (stringZipcodes = zipcodeList.to_string (header = False, index = False)). 더 긴 우편 번호 목록은 끝에 3 개의 점 (예 : "1111 ...")이 생겼습니다. 실제로 인덱스 및 열 (스칼라)을 기반으로 값을 선택하면 이런 일이 발생하지 않습니다. 내 질문 : 왜 이런 행동이 발생합니까? 적용 할 표시 옵션을 설정하는 것이 이상하게 보입니까? 고마워!
Wouter

1
다른 질문이있는 경우 @Wouter, 더 나은 대신 여기에 주석의 새를 물어
요리스

1
이것은 여러 줄이있는 단락과 같은 더 큰 문자열에는 작동하지 않습니다.
devssh

37

사용하여 pd.set_option('display.max_colwidth', -1)자동 줄 바꿈 및 여러 줄 세포.

이것은 팬더와 함께 jupyters 디스플레이를 최대한 활용하는 방법에 대한 훌륭한 리소스입니다.


6
pd.set_option('display.max_colwidth', None)최신 버전
cookiemonster

이것이 최고의 답변입니다
clancy

17

또 다른 매우 간단한 접근 방식은 목록 함수를 호출하는 것입니다.

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

언급 할 가치가 없습니다. 수녀원이 전체 열을 나열하는 것은 좋지 않지만 간단한 줄로 표시하는 것은 좋지 않습니다.


1
일부 검색 기준에 따라 df를 줄였고 한 줄로 줄이면 작동하지 않습니다. 어쨌든 디버깅이 필요한 가장 간단한 방법이며 작동하기를 원하지만 왜 그렇지 않은지 모르겠습니다. "*** KeyError : 0"이 표시됩니다. 하나의 값만있을 때 "스칼라"처럼되는 것과 관련이 있다고 생각합니다.
Starman

오늘 현재 이것은 127 문자가있는 두 개의 셀을 반환하는 df에 쿼리가있는 모든 문자를 반환합니다. 그 사람이 도움이된다면
avirr

12

전체 문자열을 인쇄하는 또 다른 쉬운 방법 values은 데이터 프레임 에서 호출 하는 것입니다.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

출력은

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]

4

이것이 당신이하려는 의도입니까?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

4

인쇄하기 전에 코드에 다음 줄을 추가하십시오.

 pd.options.display.max_colwidth = 90  # set a value as your need

다른 추가 옵션을 설정하려면 다음 단계를 수행하면됩니다.

  • pandas max_columns 기능의 옵션을 다음과 같이 변경하여 더 많은 열을 표시 할 수 있습니다.

    import pandas as pd
    pd.options.display.max_columns = 10

    (이렇게하면 10 개의 열을 표시 할 수 있으며 필요에 따라 변경할 수 있습니다.)

  • 이와 같이 더 많은 행을 표시하려면 다음과 같이 표시해야 할 행 수를 변경할 수 있습니다.

    pd.options.display.max_rows = 999

    (이것은 한 번에 999 행을 인쇄 할 수 있습니다)

이것은 잘 작동합니다

팬더에 대한 더 많은 옵션 / 설정을 변경하려면 친절하게 문서 를 참조하십시오.


3

설명하는 상황을 자주 처리하는 .to_csv()방법 은 메서드 를 사용하고 stdout에 쓰는 것입니다.

import sys

df.to_csv(sys.stdout)

업데이트 : 이제 비슷한 효과 None대신 사용이 가능합니다 sys.stdout!

이것은 모든 문자열을 포함하여 전체 데이터 프레임을 덤프해야합니다. to_csv 매개 변수를 사용하여 열 구분 기호, 인덱스 인쇄 여부 등을 구성 할 수 있습니다. 그래도 제대로 렌더링하는 것보다 덜 예쁘게 보일 것입니다.

나는 원래 pandas의 데이터 프레임에있는 모든 열의 데이터 출력에 다소 관련된 질문에 대한 답변으로 게시했습니다.


2

작은 유틸리티 함수를 만들었습니다. 이것은 저에게 잘 작동합니다.

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

옵션을 영구적으로 설정하지 않고 내 요구 사항에 따라 너비의 길이를 변경할 수 있습니다.


1

jupyter 노트북을 사용하는 경우 pandas 데이터 프레임을 HTML 테이블로 인쇄하여 전체 문자열을 인쇄 할 수도 있습니다.

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

산출

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