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

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


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


你也可以使用带有一个或多个选项的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丰富的显示逻辑(就像这样)。


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

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

print(df.to_string())

试试这个

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)

如果您正在使用Ipython Notebook (Jupyter)。你可以使用HTML

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

使用表格包:

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

您可以使用下面的方法来实现这一点。只需要传递总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)

使用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。


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

display(dataframe)

Display()也支持正确的对齐。

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

注:我正在使用Jupyter笔记本电脑。


脚本

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

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()))

产生如下结果:


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

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


你可以将expand_frame_repr设置为False:

显示。Expand_frame_repr:布尔值 是否打印宽DataFrame的完整DataFrame repr 跨多行,max_columns仍然得到尊重,但是输出 如果它的宽度超过了,会在多个“页面”上环绕吗 display.width。 (默认值:真实)


pd.set_option('expand_frame_repr', False)

要了解更多细节,请阅读如何漂亮地打印熊猫数据框架和系列


这个链接可以帮助你

嗨,我的朋友,播放这个

    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