关于python:pretty打印整个pandas 系列/数据帧

Pretty-print an entire Pandas Series / DataFrame

我经常在终端上使用系列和数据帧。序列的默认__repr__返回一个减少的样本,其中有一些头和尾值,但其他值丢失。

是否有一种内置的方式来漂亮地打印整个系列/数据帧?理想情况下,它将支持适当的对齐,可能是列之间的边框,甚至可能是不同列的颜色编码。


您还可以使用option_context,其中有一个或多个选项:

1
2
with pd.option_context('display.max_rows', None, 'display.max_columns', None):  # more options can be specified also
    print(df)

这将自动将选项返回到以前的值。

如果您正在使用Jupyter笔记本,使用display而不是print将使用Jupyter丰富的显示逻辑。


无需黑客设置。有一个简单的方法:

1
print(df.to_string())


当然,如果出现很多这样的情况,就做一个这样的函数。甚至可以配置它在每次启动ipython时加载:https://ipython.org/ipython-doc/1/config/overview.html

1
2
3
4
def print_full(x):
    pd.set_option('display.max_rows', len(x))
    print(x)
    pd.reset_option('display.max_rows')

至于着色,过于复杂的颜色对我来说似乎适得其反,但我同意像bootstrap的.table-striped这样的东西会很好。您可以创建一个问题来建议此功能。


导入熊猫后,作为使用上下文管理器的替代方法,设置用于显示整个数据帧的选项:

1
2
3
pd.set_option('display.max_columns', None)  # or 1000
pd.set_option('display.max_rows', None)  # or 1000
pd.set_option('display.max_colwidth', -1)  # or 199

有关有用选项的完整列表,请参阅:

1
pd.describe_option('display')


使用表格包:

1
pip install tabulate

并考虑以下示例用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
from io import StringIO
from tabulate import tabulate

c ="""Chromosome Start End
chr1 3 6
chr1 5 7
chr1 8 9"""


df = pd.read_table(StringIO(c), sep="\s+", header=0)

print(tabulate(df, headers='keys', tablefmt='psql'))

+----+--------------+---------+-------+
|    | Chromosome   |   Start |   End |
|----+--------------+---------+-------|
|  0 | chr1         |       3 |     6 |
|  1 | chr1         |       5 |     7 |
|  2 | chr1         |       8 |     9 |
+----+--------------+---------+-------+


如果你正在使用ipython笔记本(jupyter)。您可以使用HTML

1
2
from IPython.core.display import HTML
display(HTML(df.to_html()))


试试这个

1
2
3
4
pd.set_option('display.height',1000)
pd.set_option('display.max_rows',500)
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)

这个答案是Lucidyan先前答案的变体。它通过避免使用set_option使代码更具可读性。

导入熊猫后,作为使用上下文管理器的替代方法,设置用于显示大型数据帧的选项:

1
2
3
4
5
6
7
8
def set_pandas_options() -> None:
    pd.options.display.max_columns = 1000
    pd.options.display.max_rows = 1000
    pd.options.display.max_colwidth = 199
    pd.options.display.width = None
    # pd.options.display.precision = 2  # set as needed

set_pandas_options()

在此之后,如果使用笔记本电脑,您可以使用display(df)或仅使用df,否则可以使用print(df)


您可以使用下面的方法来实现这一点。只需将数据帧中的列总数作为参数传递给

'display.max_columns'

例如:

1
2
3
df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)