Pandas絕對是Python中最好的數據分析工具,不接受反駁。
本文將展示如何美化 Pandas DataFrame 中的數字,并使用一些更高級的 Pandas 樣式可視化選項,來提高您使用 Pandas 分析數據的能力。
常見的比如說:
- 在處理貨幣值時使用貨幣符號。例如,如果您的數據包含值 25.00,您不會立即知道該值是人民幣、美元、英鎊還是其他某種貨幣。
- 百分比是另一個有用的示,0.05 或 5%?使用百分比符號可以非常清楚地了解如何解釋數據。
- Pandas 樣式還包括更高級的工具,用于向輸出添加顏色或其他視覺元素。
案例分析
本文將使用一個虛擬數據,為大家進行講解。該數據是一個虛構組織的2018 年銷售數據。
數據集鏈接如下:
https://www.aliyundrive.com/s/Tu9zBN2x81c
1. 導入相關庫,并讀取數據
import numpy as np
import pandas as pd
df = pd.read_excel('2018_Sales_Total.xlsx')
效果如下:讀取這些數據后,我們可以做一個快速總結,看看客戶從我們這里購買了多少以及他們的平均購買金額是多少。為了簡單起見,我這里截取了前 5 項數據。
df.groupby('name')['ext price'].agg(['mean', 'sum'])
結果如下:
2. 添加貨幣符號
當您查看這些數據時,理解數字的比例有點困難,因為您有 6 個小數點和一些較大的數字。此外,目前還不清楚這是美元還是其他貨幣。我們可以使用 DataFrame style.format 解決這個問題。
(df.groupby('name')['ext price']
.agg(['mean', 'sum'])
.style.format('${0:,.2f}'))
結果如下:使用 format 函數,可以在數據上使用 python 的字符串格式化工具的所有功能。在這種情況下,我們使用 ${0:,.2f} 放置前導美元符號,添加逗號并將結果四舍五入到小數點后兩位。
例如,如果我們想四舍五入到 0 位小數,我們可以將格式更改為 ${0:,.0f}。
(df.groupby('name')['ext price']
.agg(['mean', 'sum'])
.style.format('${0:,.0f}'))
結果如下:
3. 添加百分比
如果我們想按月查看總銷售額,我們可以使用 grouper 按月匯總,并計算每個月占年總銷售額的百分比。
monthly_sales = df.groupby([pd.Grouper(key='date', freq='M')])['ext price'].agg(['sum']).reset_index()
monthly_sales['pct_of_total'] = monthly_sales['sum'] / df['ext price'].sum()
結果如下:為了更加清楚明白的展示這個百分比,我們最好將其轉換為百分數。
format_dict = {'sum':'${0:,.0f}', 'date': '{:%m-%Y}', 'pct_of_total': '{:.2%}'}
monthly_sales.style.format(format_dict).hide_index()
結果如下:
4. 突出顯示數字
除了樣式化數字,我們還可以設置 DataFrame 中的單元格樣式。讓我們用綠色突出顯示最高的數字,用彩色突出顯示最高、最低的數字。
(monthly_sales
.style
.format(format_dict)
.hide_index()
.highlight_max(color='lightgreen')
.highlight_min(color='#cd4f39'))
結果如下:
5. 設置漸變色
另一個有用的函數是 background_gradient,它可以突出顯示列中的值范圍。
(monthly_sales.style
.format(format_dict)
.background_gradient(subset=['sum'], cmap='BuGn'))
結果如下:
6. 設置數據條
pandas樣式功能還支持在列內繪制條形圖。
(monthly_sales
.style
.format(format_dict)
.hide_index()
.bar(color='#FFA07A', vmin=100_000, subset=['sum'], align='zero')
.bar(color='lightgreen', vmin=0, subset=['pct_of_total'], align='zero')
.set_caption('2018 Sales Performance'))
結果如下:
7. 繪制迷你圖
我認為這是一個很酷的功能。
import sparklines
def sparkline_str(x):
bins=np.histogram(x)[0]
sl = ''.join(sparklines(bins))
return sl
sparkline_str.__name__ = "sparkline"
df.groupby('name')['quantity', 'ext price'].agg(['mean', sparkline_str])
-
數據分析
+關注
關注
2文章
1449瀏覽量
34060 -
python
+關注
關注
56文章
4797瀏覽量
84711
發布評論請先 登錄
相關推薦
評論