如何在Jupyter笔记本中将列表输出为表格?

Way*_*ner 60 python jupyter-notebook

我知道我以前在某个地方见过一些例子,但对于我的生活,我在google搜索时找不到它.

我有一些数据行:

data = [[1,2,3],
        [4,5,6],
        [7,8,9],
        ]
Run Code Online (Sandbox Code Playgroud)

我想在表格中输出这些数据,例如

+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+
Run Code Online (Sandbox Code Playgroud)

显然,我可以使用类似漂亮的库或下载熊猫或其他东西,但我对此非常不感兴趣.

我只想在Jupyter笔记本单元格中输出行作为表格.我该怎么做呢?

ruf*_*fsl 62

我刚刚发现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')))
Run Code Online (Sandbox Code Playgroud)

仍然在寻找简单易用的东西来创建更复杂的表格布局,比如乳胶语法和格式,以合并单元格并在笔记本中进行变量替换:
允许在Markdown单元格中引用Python变量#2958

  • 如今,即使只是 `tabulate.tabulate(table, tablefmt='html')` 似乎也可以工作(尝试过 Jupyter 6.0.3、JupyterLab 2.0.1)。好的! (3认同)

Way*_*ner 46

我终于重新找到了我正在寻找的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)
       )
))
Run Code Online (Sandbox Code Playgroud)

(我可能略微理解了这些理解,但这display(HTML('some html here'))正是我们所需要的)


小智 39

有一个很好的技巧:使用pandas DataFrame包装数据.

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

它显示如下数据:

  | Foo | Bar |
0 | 1   | 2   |
1 | 3   | 4   |
Run Code Online (Sandbox Code Playgroud)

  • 作为一个绝对喜欢python而不是数据科学的人,当看起来最好看的答案是"熊猫数据框架"时,看到九线,四重导入,三重函数调用答案得到提升,这真让我感到非常难过.我的启发式是:"如果它很长 - 它可能是错的!" (6认同)
  • 如果你已经有了 Pandas,这绝对很简单,但如果你没有,用它来打印表格就有点“大锤砸坚果”了 (5认同)
  • 您甚至可以使用“to_html()”将 DataFrame 显示为 HTML,请参阅 /sf/answers/2076581671/ (2认同)

num*_*er5 9

tabletext很适合这个

import tabletext

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

print tabletext.to_text(data)
Run Code Online (Sandbox Code Playgroud)

结果:

???????????????????
? 1 ?     2 ?  30 ?
???????????????????
? 4 ? 23125 ?   6 ?
???????????????????
? 7 ?     8 ? 999 ?
???????????????????
Run Code Online (Sandbox Code Playgroud)


Sat*_*jit 6

如果你不介意使用一点 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))
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

data = [[1,2,3],[4,5,6],[7,8,9]]
display_table(data)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明