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

时间:2013-10-01 19:46:07

标签: python pandas dataframe

我在终端上使用Series和DataFrames很多。系列的默认__repr__会返回一个缩小的样本,其中包含一些头部和尾部值,但其余部分则缺失。

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

14 个答案:

答案 0 :(得分:570)

您还可以使用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代替print将使用富有jupyter的显示逻辑。

答案 1 :(得分:410)

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

print(df.to_string())

答案 2 :(得分:156)

当然,如果出现这种情况,请制作一个类似这样的功能。您甚至可以将其配置为每次启动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's .table-striped之类的东西会很好。您可以随时create an issue建议此功能。

答案 3 :(得分:67)

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

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

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

pd.describe_option('display')

答案 4 :(得分:32)

使用制表包:

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

答案 5 :(得分:11)

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

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

答案 6 :(得分:6)

试试这个

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)

答案 7 :(得分:5)

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

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

def set_pandas_options() -> None:
    pd.options.display.max_columns = 1000
    pd.options.display.max_rows = 1000
    pd.options.display.max_colwidth = 199
    pd.options.display.width = None
    # pd.options.display.precision = 2  # set as needed

set_pandas_options()

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

答案 8 :(得分:1)

您可以使用以下方法实现此目的。只是通过总数没有。 DataFrame中的列作为

的arg
  

' display.max_columns'

例如:

{{1}}

答案 9 :(得分:1)

脚本

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

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

产生如下结果:

Display pd.Series as table in Jupyter notebooks

答案 10 :(得分:1)

您可以将 expand_frame_repr 设置为 False

<块引用>

display.expand_frame_repr : boolean

是否打印出宽数据帧的完整数据帧repr 跨多行,max_columns 仍然受到尊重,但输出 如果宽度超过,将环绕多个“页面” display.width

[default: True]


pd.set_option('expand_frame_repr', False)

欲了解更多详情,请阅读How to Pretty-Print Pandas DataFrames and Series

答案 11 :(得分:0)

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)

答案 12 :(得分:-1)

我使用dataframe.head(len(dataframe))在jupyter笔记本中进行漂亮的显示。

答案 13 :(得分:-3)

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

display(dataframe)

display()也支持正确的对齐方式。

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

注意-我正在使用Jupyter笔记本。