How do I output lists as a table in Jupyter notebook?

后端 未结 11 1047
灰色年华
灰色年华 2021-01-30 09:51

I know that I\'ve seen some example somewhere before but for the life of me I cannot find it when googling around.

I have some rows of data:

data = [[1,2         


        
11条回答
  •  遇见更好的自我
    2021-01-30 10:39

    I used to have the same problem. I could not find anything that would help me so I ended up making the class PrintTable--code below. There is also an output. The usage is simple:

    ptobj = PrintTable(yourdata, column_captions, column_widths, text_aligns)
    ptobj.print()
    

    or in one line:

    PrintTable(yourdata, column_captions, column_widths, text_aligns).print()
    

    Output:

    -------------------------------------------------------------------------------------------------------------
      Name                                     | Column 1   | Column 2   | Column 3   | Column 4   | Column 5    
    -------------------------------------------------------------------------------------------------------------
      Very long name 0                         |          0 |          0 |          0 |          0 |          0  
      Very long name 1                         |          1 |          2 |          3 |          4 |          5  
      Very long name 2                         |          2 |          4 |          6 |          8 |         10  
      Very long name 3                         |          3 |          6 |          9 |         12 |         15  
      Very long name 4                         |          4 |          8 |         12 |         16 |         20  
      Very long name 5                         |          5 |         10 |         15 |         20 |         25  
      Very long name 6                         |          6 |         12 |         18 |         24 |         30  
      Very long name 7                         |          7 |         14 |         21 |         28 |         35  
      Very long name 8                         |          8 |         16 |         24 |         32 |         40  
      Very long name 9                         |          9 |         18 |         27 |         36 |         45  
      Very long name 10                        |         10 |         20 |         30 |         40 |         50  
      Very long name 11                        |         11 |         22 |         33 |         44 |         55  
      Very long name 12                        |         12 |         24 |         36 |         48 |         60  
      Very long name 13                        |         13 |         26 |         39 |         52 |         65  
      Very long name 14                        |         14 |         28 |         42 |         56 |         70  
      Very long name 15                        |         15 |         30 |         45 |         60 |         75  
      Very long name 16                        |         16 |         32 |         48 |         64 |         80  
      Very long name 17                        |         17 |         34 |         51 |         68 |         85  
      Very long name 18                        |         18 |         36 |         54 |         72 |         90  
      Very long name 19                        |         19 |         38 |         57 |         76 |         95  
    -------------------------------------------------------------------------------------------------------------
    

    The code for the class PrintTable

    # -*- coding: utf-8 -*-
    
    # Class
    class PrintTable:
        def __init__(self, values, captions, widths, aligns):
        if not all([len(values[0]) == len(x) for x in [captions, widths, aligns]]):
            raise Exception()
        self._tablewidth = sum(widths) + 3*(len(captions)-1) + 4
        self._values = values
        self._captions = captions
        self._widths = widths
        self._aligns = aligns
    
        def print(self):
        self._printTable()
    
        def _printTable(self):
        formattext_head = ""
        formattext_cell = ""
        for i,v in enumerate(self._widths):
            formattext_head += "{" + str(i) + ":<" + str(v) + "} | "
            formattext_cell += "{" + str(i) + ":" + self._aligns[i] + str(v) + "} | "
        formattext_head = formattext_head[:-3]
        formattext_head = "  " + formattext_head.strip() + "  "
        formattext_cell = formattext_cell[:-3]
        formattext_cell = "  " + formattext_cell.strip() + "  "
    
        print("-"*self._tablewidth)
        print(formattext_head.format(*self._captions))
        print("-"*self._tablewidth)
        for w in self._values:
            print(formattext_cell.format(*w))
        print("-"*self._tablewidth)
    

    Demonstration

    # Demonstration
    
    headername = ["Column {}".format(x) for x in range(6)]
    headername[0] = "Name"
    data = [["Very long name {}".format(x), x, x*2, x*3, x*4, x*5] for x in range(20)] 
    
    PrintTable(data, \
           headername, \
           [70, 10, 10, 10, 10, 10], \
           ["<",">",">",">",">",">"]).print()
    

提交回复
热议问题