[英]Pretty-print an entire Pandas Series / DataFrame
我經常在終端上使用 Series 和 DataFrames。 Series 的默認__repr__
返回一個縮減樣本,帶有一些頭部和尾部值,但缺少 rest。
是否有內置方法可以漂亮地打印整個系列/DataFrame? 理想情況下,它將支持正確的 alignment,可能是列之間的邊界,甚至可能支持不同列的顏色編碼。
您還可以使用帶有一個或多個選項的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 豐富的顯示邏輯(像這樣) 。
無需破解設置。 有一個簡單的方法:
print(df.to_string())
當然,如果經常出現這種情況,請創建一個這樣的函數。 您甚至可以將其配置為每次啟動 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
這樣的東西會很好。 您可以隨時創建一個問題來建議此功能。
導入 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')
使用表格包:
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 |
+----+--------------+---------+-------+
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
如果你需要的是 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
。
如果您使用的是 Ipython Notebook (Jupyter)。 你可以使用 HTML
from IPython.core.display import HTML
display(HTML(df.to_html()))
試試這個
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)
您可以使用以下方法實現此目的。 只是通過總沒有。 DataFrame 中作為 arg 存在的列數
'display.max_columns'
例如:
df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
print(df)
沒有人提出過這種簡單的純文本解決方案:
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()))
產生如下結果:
創建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)
您可以將expand_frame_repr
設置為False
:
display.expand_frame_repr : boolean
是否跨多行打印出寬 DataFrame 的完整 DataFrame repr,仍然尊重
max_columns
,但如果其寬度超過display.width
,輸出將跨越多個“頁面”。
[default: True]
pd.set_option('expand_frame_repr', False)
有關更多詳細信息,請閱讀如何漂亮地打印 Pandas DataFrames 和 Series
pd.set_option("display.max_rows", None, "display.max_columns", None)
print(df)
就這樣做
Output
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
我使用dataframe.head(len(dataframe))
在jupyter筆記本中進行漂亮的顯示。
嘗試使用 display() 函數。 這將自動使用水平和垂直滾動條,這樣您就可以輕松地顯示不同的數據集,而不是使用 print()。
display(dataframe)
display() 也支持正確對齊。
但是,如果你想讓數據集更漂亮,你可以檢查pd.option_context()
。 它有很多選項可以清楚地顯示數據框。
注意 - 我正在使用 Jupyter Notebooks。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.