962

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

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

4

13 回答 13

1271

您还可以将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 丰富的显示逻辑(就像这样)

于 2015-06-07T09:22:15.250 回答
864

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

print(df.to_string())
于 2016-10-07T18:45:36.123 回答
181

当然,如果这种情况很多,请制作一个这样的功能。您甚至可以将其配置为每次启动 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')

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

于 2013-10-01T21:48:30.600 回答
152

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

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

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

pd.describe_option('display')
于 2016-05-20T13:18:54.233 回答
60

使用表格包:

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 |
+----+--------------+---------+-------+
于 2018-04-09T19:02:30.697 回答
35

使用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_stringSeries.to_string

使用to_markdown

如果你需要的是 markdown 输出,Pandas 1.0.0 有DataFrame.to_markdownSeries.to_markdown方法。

使用to_html

如果您需要的是 HTML 输出,Pandas 0.25.3 确实有一个DataFrame.to_html方法,但没有一个Series.to_html. 请注意, aSeries可以转换为 a DataFrame

于 2018-09-20T20:23:29.583 回答
32

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

from IPython.core.display import HTML
display(HTML(df.to_html()))
于 2018-03-20T01:56:46.850 回答
13

尝试这个

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)
于 2017-12-07T02:21:52.057 回答
6

创建datascroller的部分原因是为了解决这个问题。

pip install datascroller

它将数据框加载到终端视图中,您可以使用鼠标或箭头键“滚动”,有点像终端上支持查询、突出显示等的 Excel 工作簿。

import pandas as pd
from datascroller import scroll

# Call `scroll` with a Pandas DataFrame as the sole argument:
my_df = pd.read_csv('<path to your csv>')
scroll(my_df)

披露:我是 datascroller 的作者之一

于 2020-11-12T18:51:37.947 回答
5

您可以设置expand_frame_reprFalse

display.expand_frame_repr : boolean

是否跨多行打印宽 DataFrame 的完整 DataFrame reprmax_columns仍然受到尊重,但如果其宽度超过 display.width.

[default: True]


pd.set_option('expand_frame_repr', False)

有关更多详细信息,请阅读如何漂亮打印 Pandas 数据帧和系列

于 2021-05-23T19:49:31.570 回答
4

脚本

没有人提出过这种简单的纯文本解决方案:

from pprint import pprint

pprint(s.to_dict())

产生如下结果:

{'% Diabetes': 0.06365372374283895,
 '% Obesity': 0.06365372374283895,
 '% Bachelors': 0.0,
 '% Poverty': 0.09548058561425843,
 '% Driving Deaths': 1.1775938892425206,
 '% Excessive Drinking': 0.06365372374283895}

Jupyter 笔记本

此外,在使用 Jupyter 笔记本时,这是一个很好的解决方案。

注意:pd.Series()没有.to_html()所以必须转换为pd.DataFrame()

from IPython.display import display, HTML

display(HTML(s.to_frame().to_html()))

产生如下结果:

在 Jupyter 笔记本中将 pd.Series 显示为表格

于 2020-10-20T15:07:38.120 回答
3

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

'display.max_columns'

例如:

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)
于 2018-06-15T05:59:22.250 回答
-2

尝试使用 display() 函数。这将自动使用水平和垂直滚动条,这样您就可以轻松地显示不同的数据集,而不是使用 print()。

display(dataframe)

display() 也支持正确对齐。

但是,如果您想让数据集更漂亮,您可以检查pd.option_context(). 它有很多选项可以清楚地显示数据框。

注意 - 我正在使用 Jupyter Notebooks。

于 2019-08-26T10:44:30.930 回答