漂亮印刷整个熊猫系列/数据框架

问题描述 投票:397回答:9

我在终端上使用Series和DataFrames很多。系列的默认__repr__返回一个减少的样本,具有一些头部和尾部值,但其余部分丢失。

是否有内置的方式来打印整个Series / DataFrame?理想情况下,它将支持正确的对齐,可能支持列之间的边界,甚至可能支持不同列的颜色编码。

python pandas dataframe
9个回答
602
投票

你也可以使用option_context,有一个或多个选项:

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

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

如果您正在使用jupyter-notebook,使用display(df)而不是print(df)将使用jupyter富显示逻辑(like so)


442
投票

无需破解设置。有一个简单的方法:

print(df.to_string())

157
投票

当然,如果出现这种情况,请制作一个类似这样的功能。您甚至可以将其配置为每次启动IPython时加载:https://ipython.org/ipython-doc/1/config/overview.html

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

至于着色,过于精细的颜色听起来适得其反,但我同意像bootstrap's .table-striped这样的东西会很好。你可以随时create an issue建议这个功能。


72
投票

导入pandas后,作为使用上下文管理器的替代方法,设置此类options以显示整个数据帧:

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

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

pd.describe_option('display')

34
投票

使用制表包:

pip install tabulate

并考虑以下示例用法:

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 |
+----+--------------+---------+-------+

13
投票

如果您使用的是Ipython Notebook(Jupyter)。您可以使用HTML

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

7
投票

试试这个

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)

5
投票

这个答案是以前的answer by lucidyan的变种。它通过避免使用set_option使代码更具可读性。

导入pandas后,作为使用上下文管理器的替代方法,设置此类options以显示大型数据帧:

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)


1
投票

您可以使用以下方法实现此目的。只是通过总数没有。 DataFrame中存在的列作为arg

'display.max_columns'

例如:

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)
© www.soinside.com 2019 - 2024. All rights reserved.