漂亮地打印整个 Pandas Series/DataFrame
- 2024-12-06 08:40:00
- admin 原创
- 92
问题描述:
我经常在终端上使用 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)`
对于任何包含浮点数且具有object
dtype 的列,这些列需要先转换为float
dtype,然后才能应用显示精度。
使用to_string
Pandas 0.25.3 确实具有接受格式化选项的DataFrame.to_string
方法Series.to_string
。
使用to_markdown
如果您需要的是 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
。
解决方案 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()))
产生如下结果:
解决方案 11:
您可以设置expand_frame_repr
为False
:
display.expand_frame_repr : boolean
是否跨多行打印出宽 DataFrames 的完整 DataFrame repr
max_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。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件