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

Dun*_*eal 531 python dataframe pandas

我在终端上使用Series和DataFrames很多.__repr__Series 的默认值返回一个简化的样本,带有一些head和tail值,但其余的则丢失.

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

tsv*_*kas 712

您还可以使用option_context带有一个或多个选项的:

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

这将自动将选项返回到其默认值.

如果您在jupyter笔记本工作时,使用display(df)的不是print(df)将使用jupyter丰富的显示逻辑.

  • 对于任何想知道的人:当使用jupyter时,使用`display(df)`而不是`print(df)` (26认同)
  • 什么是3代表在这里? (3认同)
  • 为了避免将列彼此包裹在一起,您还可以将 `..., 'display.width', 100, ...` (使用适当的值)添加到上下文管理器。 (3认同)
  • 谢谢!请注意,将最大值设置为"无"会将其关闭.使用`with pd.option_context()`选项可以非常清楚和明确地记录正在进行的操作,并清楚地说明如何使用例如`precision`,`max_colwidth`,`expand_frame_repr来实现可能需要的输出格式的其他更改. `,`colheader_justify`,`date_yearfirst`,`encoding`等等:http://pandas.pydata.org/pandas-docs/stable/options.html (2认同)
  • 如果 DataFrame 真的很大,暂时将其编写为 .csv 并使用 Jupyter Lab 的快速 csv 查看器可能是有意义的 (2认同)

And*_*hin 506

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

print(df.to_string())
Run Code Online (Sandbox Code Playgroud)

  • 使用`with pd.option_context()`选项可以更清楚,更明确地记录发生的事情,并清楚地说明如何使用例如`precision`,`max_colwidth`来实现输出格式化的其他变化. expand_frame_repr`,`colheader_justify`,`date_yearfirst`,`encoding`等等:http://pandas.pydata.org/pandas-docs/stable/options.html (11认同)
  • 提问者要求提供"漂亮的印刷"解决方案.这是**_不_**它.如果在Jupyter Notebook中使用它,则根本不会使用内置的漂亮显示器.在打印`df`之前,最好使用`pd.set_option('display.max_rows',None)`. (8认同)
  • 如果列太多,则不起作用 (5认同)
  • 这可能不是所问问题的解决方案,但它正是我正在寻找的查看 df 并继续前进的方法。 (4认同)
  • 你有多少列?我已经检查了 1300 列并且它工作正常: from itertools import组合 from string import ascii_letters df = pd.DataFrame(data=[[0]*1326], index=[0], columns=[(a+b)对于 a,b 组合(ascii_letters, 2)]) (2认同)
  • 我确实更喜欢其他答案,因为如果我有很多列并且我的屏幕不足以显示它们,这在我的示例中看起来很奇怪。列名和数据将做单独的换行符,因此不再容易看到哪些数据属于哪个列名。 (2认同)

Dan*_*lan 161

当然,如果出现这种情况,请制作一个类似这样的功能.您甚至可以将其配置为每次启动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')
Run Code Online (Sandbox Code Playgroud)

至于着色,过于精细的颜色听起来适得其反,但我同意像bootstrap这样的.table-striped东西会很好.您始终可以创建一个问题来建议此功能.

  • 链接已经死了.也许它应该是http://ipython.org/ipython-doc/dev/config/intro.html? (5认同)
  • 如果某人,任何人,甚至是作者可能都可以验证并修复链接并将这些评论标记为过时,那将是很棒的. (2认同)

luc*_*yan 86

导入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', -1)  # or 199
Run Code Online (Sandbox Code Playgroud)

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

pd.describe_option('display')
Run Code Online (Sandbox Code Playgroud)

  • @Corrumpo对于某些选项,如果要完全表示,则应使用`-1` int值而不是`None` (4认同)

The*_*Cat 38

使用制表包:

pip install tabulate
Run Code Online (Sandbox Code Playgroud)

并考虑以下示例用法:

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 |
+----+--------------+---------+-------+
Run Code Online (Sandbox Code Playgroud)

  • @eliu 谢谢你的信息。你总是有`pd_series.to_frame()` (4认同)

小智 15

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

from IPython.core.display import HTML
display(HTML(df.to_html()))
Run Code Online (Sandbox Code Playgroud)

  • 当心尝试显示与此相关的大数据框。除非您在.ipyndb文件中编辑原始代码,否则可能会耗尽内存,并且永远无法再次打开笔记本。真实的故事 ;) (4认同)

小智 15

运行这个

    pd.set_option("display.max_rows", None, "display.max_columns", None)
    print(df)
Run Code Online (Sandbox Code Playgroud)

就这样做

输出

Column
0    row 0
1    row 1
2    row 2
3    row 3
4    row 4
5    row 5
6    row 6
7    row 7
8    row 8
9    row 9
10  row 10
11  row 11
12  row 12
13  row 13
14  row 14
15  row 15
16  row 16
17  row 17
18  row 18
19  row 19
20  row 20
21  row 21
22  row 22
23  row 23
24  row 24
25  row 25
26  row 26
27  row 27
28  row 28
29  row 29
30  row 30
31  row 31
32  row 32
33  row 33
34  row 34
35  row 35
36  row 36
37  row 37
38  row 38
39  row 39
40  row 40
41  row 41
42  row 42
43  row 43
44  row 44
45  row 45
46  row 46
47  row 47
48  row 48
49  row 49
50  row 50
51  row 51
52  row 52
53  row 53
54  row 54
55  row 55
56  row 56
57  row 57
58  row 58
59  row 59
60  row 60
61  row 61
62  row 62
63  row 63
64  row 64
65  row 65
66  row 66
67  row 67
68  row 68
69  row 69
Run Code Online (Sandbox Code Playgroud)


Acu*_*nus 13

此答案是lucidyan先前的答案的变形。通过避免使用,可以使代码更具可读性set_option

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

def set_pandas_display_options() -> None:
    display = pd.options.display

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

set_pandas_display_options()
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用display(df)或仅df在使用笔记本时使用,否则print(df)


D-W*_*D-W 11

脚本

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

from pprint import pprint

pprint(s.to_dict())
Run Code Online (Sandbox Code Playgroud)

产生如下结果:

{'% Diabetes': 0.06365372374283895,
 '% Obesity': 0.06365372374283895,
 '% Bachelors': 0.0,
 '% Poverty': 0.09548058561425843,
 '% Driving Deaths': 1.1775938892425206,
 '% Excessive Drinking': 0.06365372374283895}
Run Code Online (Sandbox Code Playgroud)

Jupyter 笔记本

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

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

from IPython.display import display, HTML

display(HTML(s.to_frame().to_html()))
Run Code Online (Sandbox Code Playgroud)

产生如下结果:

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


Lia*_*lin 8

试试这个

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)
Run Code Online (Sandbox Code Playgroud)


dat*_*ess 7

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

pip install datascroller
Run Code Online (Sandbox Code Playgroud)

它将数据帧加载到终端视图中,您可以使用鼠标或箭头键“滚动”,有点像终端上的 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)
Run Code Online (Sandbox Code Playgroud)

披露:我是 datascroller 的作者之一

  • 嗨@rbonallo,它只是一个仅适用于终端的工具。如果它可以在笔记本中正常工作那就太好了,但它依赖于curses库,而curses库都是终端字符。看起来可以连接到现有的 ipython 内核(SO 9977446),因此,如果您的 jupyter 笔记本旁边有一个仅用于数据滚动的终端窗口,那么这将是一个巧妙的技巧。 (2认同)

Gio*_*ous 7

您可以设置expand_frame_reprFalse

\n
\n

display.expand_frame_repr : boolean

\n

是否跨多行打印宽 DataFrame 的完整 DataFrame 表示max_columns仍然受到尊重,但如果输出宽度超过,输出将环绕多个 \xe2\x80\x9cpages\xe2\x80\x9d display.width

\n

[default: True]

\n
\n
\n
pd.set_option(\'expand_frame_repr\', False)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n