我经常在终端上使用Series和DataFrames。Series的默认__repr__返回一个减少的样本,其中有一些头部和尾部值,但其余的都没有。

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


当前回答

您可以使用下面的方法来实现这一点。只需要传递总no。在DataFrame中显示为arg to的列

“display.max_columns”

例如:

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

其他回答

您可以使用下面的方法来实现这一点。只需要传递总no。在DataFrame中显示为arg to的列

“display.max_columns”

例如:

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

当然,如果这个经常出现,就做一个这样的函数。您甚至可以将其配置为在每次启动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的.table条纹之类的东西会很好。您总是可以创建一个问题来建议这个功能。

使用表格包:

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

使用pd.options.display

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

导入pandas后,作为使用上下文管理器的另一种选择,设置以下选项来显示大数据框架:

def set_pandas_display_options() -> None:
    """Set pandas display options."""
    # Ref: https://stackoverflow.com/a/52432757/
    display = pd.options.display

    display.max_columns = 1000
    display.max_rows = 1000
    display.max_colwidth = 199
    display.width = 1000
    # display.precision = 2  # set as needed

set_pandas_display_options()

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

使用to_string

Pandas 0.25.3有DataFrame。to_string和Series。接受格式化选项的To_string方法。

使用to_markdown

如果你需要的是降价输出,Pandas 1.0.0有DataFrame。to_markdown和Series。to_markdown方法。

使用to_html

如果你需要的是HTML输出,Pandas 0.25.3确实有一个DataFrame。to_html方法,而不是Series.to_html方法。注意Series可以转换为DataFrame。

不需要侵入设置。有一个简单的方法:

print(df.to_string())