我在终端上使用Series和DataFrames很多。系列的默认__repr__
会返回一个缩小的样本,其中包含一些头部和尾部值,但其余部分则缺失。
是否有内置方式可以打印整个Series / DataFrame?理想情况下,它将支持正确的对齐,可能支持列之间的边界,甚至可能为不同的列进行颜色编码。
答案 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笔记本时,这是一个很好的解决方案。
注意:pd.Series()
没有.to_html()
,因此必须将其转换为pd.DataFrame()
from IPython.display import display, HTML
display(HTML(s.to_frame().to_html()))
产生如下结果:
答案 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)
答案 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笔记本。