簡體   English   中英

漂亮地打印整個 Pandas 系列 / DataFrame

[英]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_stringSeries.to_string方法。

使用to_markdown

如果你需要的是 markdown 輸出,Pandas 1.0.0 有DataFrame.to_markdownSeries.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 筆記本

此外,在使用 Jupyter 筆記本時,這是一個很好的解決方案。

注意: pd.Series()沒有.to_html()所以它必須轉換為pd.DataFrame()

from IPython.display import display, HTML

display(HTML(s.to_frame().to_html()))

產生如下結果:

在 Jupyter 筆記本中將 pd.Series 顯示為表格

創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM