[python] Jupyter 노트북에서 목록을 테이블로 출력하려면 어떻게해야합니까?

전에 어딘가에서 몇 가지 예를 보았지만 내 삶을 위해 인터넷 검색을 할 때 찾을 수 없다는 것을 알고 있습니다.

데이터 행이 있습니다.

data = [[1,2,3],
        [4,5,6],
        [7,8,9],
        ]

이 데이터를 테이블에 출력하고 싶습니다.

+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+

분명히 나는 ​​prettytable과 같은 라이브러리를 사용하거나 pandas 등을 다운로드 할 수 있지만 그렇게하는 데는 무관심합니다.

내 행을 Jupyter 노트북 셀의 테이블로 출력하고 싶습니다. 어떻게해야합니까?



답변

방금 tabulate 에 HTML 옵션이 있고 사용하기가 다소 간단 하다는 것을 알았습니다 .
Wayne Werner의 답변과 매우 유사합니다.

from IPython.display import HTML, display
import tabulate
table = [["Sun",696000,1989100000],
         ["Earth",6371,5973.6],
         ["Moon",1737,73.5],
         ["Mars",3390,641.85]]
display(HTML(tabulate.tabulate(table, tablefmt='html')))

셀을 병합하고 노트북에서 변수 대체를 수행하기 위해 라텍스 구문 및 서식과 같이 더 복잡한 테이블 레이아웃을 만드는 데 사용하기 쉬운 방법을 찾고 있습니다.
마크 다운 셀에서 Python 변수에 대한 참조 허용 # 2958


답변

멋진 트릭이 있습니다. 데이터를 pandas DataFrame으로 래핑합니다.

import pandas as pd
data = [[1, 2], [3, 4]]
pd.DataFrame(data, columns=["Foo", "Bar"])

다음과 같은 데이터를 표시합니다.

  | Foo | Bar |
0 | 1   | 2   |
1 | 3   | 4   |


답변

마침내 제가 찾고 있던 jupyter / IPython 문서 를 다시 찾았습니다 .

나는 이것이 필요했다 :

from IPython.display import HTML, display

data = [[1,2,3],
        [4,5,6],
        [7,8,9],
        ]

display(HTML(
   '<table><tr>{}</tr></table>'.format(
       '</tr><tr>'.join(
           '<td>{}</td>'.format('</td><td>'.join(str(_) for _ in row)) for row in data)
       )
))

(나는 이해력을 약간 망쳐 놓았을 수도 있지만 display(HTML('some html here'))우리가 필요로했던 것입니다)


답변

표 텍스트가 잘 맞습니다.

import tabletext

data = [[1,2,30],
        [4,23125,6],
        [7,8,999],
        ]

print tabletext.to_text(data)

결과:

┌───┬───────┬─────┐
│ 1230 │
├───┼───────┼─────┤
│ 4231256 │
├───┼───────┼─────┤
│ 78999 │
└───┴───────┴─────┘


답변

약간의 html을 사용해도 괜찮다면 이와 같은 것이 작동 할 것입니다.

from IPython.display import HTML, display

def display_table(data):
    html = "<table>"
    for row in data:
        html += "<tr>"
        for field in row:
            html += "<td><h4>%s</h4><td>"%(field)
        html += "</tr>"
    html += "</table>"
    display(HTML(html))

그리고 이렇게 사용하세요

data = [[1,2,3],[4,5,6],[7,8,9]]
display_table(data)

여기에 이미지 설명 입력


답변

다음 기능을 사용해 볼 수 있습니다.

def tableIt(data):
    for lin in data:
        print("+---"*len(lin)+"+")
        for inlin in lin:
            print("|",str(inlin),"", end="")
        print("|")
    print("+---"*len(lin)+"+")

data = [[1,2,3,2,3],[1,2,3,2,3],[1,2,3,2,3],[1,2,3,2,3]]

tableIt(data)


답변

좋아, 그래서 이것은 나보다 조금 더 어려웠다.

def print_matrix(list_of_list):
    number_width = len(str(max([max(i) for i in list_of_list])))
    cols = max(map(len, list_of_list))
    output = '+'+('-'*(number_width+2)+'+')*cols + '\n'
    for row in list_of_list:
        for column in row:
            output += '|' + ' {:^{width}d} '.format(column, width = number_width)
        output+='|\n+'+('-'*(number_width+2)+'+')*cols + '\n'
    return output

이것은 다양한 수의 행, 열 및 자릿수 (숫자)에서 작동합니다.

data = [[1,2,30],
        [4,23125,6],
        [7,8,999],
        ]
print print_matrix(data)
>>>>+-------+-------+-------+
    |   1   |   2   |  30   |
    +-------+-------+-------+
    |   4   | 23125 |   6   |
    +-------+-------+-------+
    |   7   |   8   |  999  |
    +-------+-------+-------+