漂亮地打印整个 Pandas Series/DataFrame

2024-12-06 08:40:00
admin
原创
151
摘要:问题描述:我经常在终端上使用 Series 和 DataFrames。Series__repr__的默认设置是返回一个简化的样本,其中包含一些头部和尾部值,但其余部分缺失。是否有内置方法可以漂亮地打印整个 Series / DataFrame?理想情况下,它将支持适当的对齐,也许是列之间的边框,甚至可能是不同...

问题描述:

我经常在终端上使用 Series 和 DataFrames。Series__repr__的默认设置是返回一个简化的样本,其中包含一些头部和尾部值,但其余部分缺失。

是否有内置方法可以漂亮地打印整个 Series / DataFrame?理想情况下,它将支持适当的对齐,也许是列之间的边框,甚至可能是不同列的颜色编码。


解决方案 1:

您还可以使用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 丰富的显示逻辑(如下所示)。

解决方案 2:

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

print(df.to_string())

解决方案 3:

当然,如果这种情况经常发生,可以创建一个类似这样的函数。你甚至可以将其配置为每次启动 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-striped这样的功能会很好。您可以随时创建一个问题来建议此功能。

解决方案 4:

导入 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')

解决方案 5:

使用 tabulate 包:

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

解决方案 6:

使用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 = 10_000
    display.max_colwidth = 199
    display.width = 1000
    # display.precision = 2  # set as needed
    # display.float_format = lambda x: '{:,.2f}'.format(x)  # set as needed

set_pandas_display_options()

此后,如果使用笔记本,您可以使用display(df)或,否则。df`print(df)`

对于任何包含浮点数且具有objectdtype 的列,这些列需要先转换为floatdtype,然后才能应用显示精度。

使用to_string

Pandas 0.25.3 确实具有接受格式化选项的DataFrame.to_string方法Series.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。请注意,Series可以将转换为DataFrame

解决方案 7:

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

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

解决方案 8:

只需运行

    pd.set_option("display.max_rows", None, "display.max_columns", None)
    print(df)

就这么做

输出

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

解决方案 9:

尝试一下

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)

解决方案 10:

脚本

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

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 显示为表格

解决方案 11:

您可以设置expand_frame_reprFalse

display.expand_frame_repr : boolean

是否跨多行打印出宽 DataFrames 的完整 DataFrame reprmax_columns仍然受到尊重,但如果其宽度超过,输出将跨越多个“页面”
display.width

[default: True]


pd.set_option('expand_frame_repr', False)

有关更多详细信息,请阅读如何漂亮地打印 Pandas DataFrames 和 Series

解决方案 12:

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 的作者之一

解决方案 13:

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

‘显示.最大列数’

例如:

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

解决方案 14:

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

display(dataframe)

display() 也支持正确对齐。

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

注意-我正在使用 Jupyter Notebooks。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用