我如何打印一个熊猫数据框架作为一个漂亮的基于文本的表,就像下面?

+------------+---------+-------------+
| column_one | col_two |   column_3  |
+------------+---------+-------------+
|          0 |  0.0001 | ABCD        |
|          1 |  1e-005 | ABCD        |
|          2 |  1e-006 | long string |
|          3 |  1e-007 | ABCD        |
+------------+---------+-------------+

当前回答

如果您使用的是Jupyter笔记本,则可以运行以下代码以交互式方式在格式良好的表格中显示数据框架。

这个答案建立在上面的to_html('temp.html')答案上,但不是创建一个文件,而是直接在笔记本中显示格式良好的表格:

from IPython.display import display, HTML

display(HTML(df.to_html()))

在iPython Notebook中显示DataFrame作为表

其他回答

一个简单的方法是输出为html, pandas开箱即用:

df.to_html('temp.html')

您可以使用prettytable将表格呈现为文本。诀窍是将data_frame转换为内存中的csv文件,并以漂亮的方式读取它。代码如下:

from StringIO import StringIO
import prettytable    

output = StringIO()
data_frame.to_csv(output)
output.seek(0)
pt = prettytable.from_csv(output)
print pt

我用了奥弗的答案一段时间,发现它在大多数情况下都很棒。不幸的是,由于pandas的to_csv和prettytable的from_csv之间的不一致,我不得不以不同的方式使用prettytable。

一个失败的例子是包含逗号的数据帧:

pd.DataFrame({'A': [1, 2], 'B': ['a,', 'b']})

Prettytable引发了一个形式错误:

Error: Could not determine delimiter

下面的函数处理这种情况:

def format_for_print(df):    
    table = PrettyTable([''] + list(df.columns))
    for row in df.itertuples():
        table.add_row(row)
    return str(table)

如果你不关心索引,使用:

def format_for_print2(df):    
    table = PrettyTable(list(df.columns))
    for row in df.itertuples():
        table.add_row(row[1:])
    return str(table)

更新:一个更好的解决方案是简单地把数据帧的变量名放在单元格的最后一行。它会自动打印出漂亮的格式。

import pandas as pd
import numpy as np

df = pd.DataFrame({'Data1': np.linspace(0,10,11), 'Data2': np.linspace(10,0,11)})
df

如果您使用的是Jupyter笔记本,则可以运行以下代码以交互式方式在格式良好的表格中显示数据框架。

这个答案建立在上面的to_html('temp.html')答案上,但不是创建一个文件,而是直接在笔记本中显示格式良好的表格:

from IPython.display import display, HTML

display(HTML(df.to_html()))

在iPython Notebook中显示DataFrame作为表