一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用 Style 方法提高 Pandas 數(shù)據(jù)的顏值

 F2967527 2020-05-19


Pandas的style用法在大多數(shù)教程中見的比較少,它主要是用來美化DataFrameSeries的輸出,能夠更加直觀地顯示數(shù)據(jù)結(jié)果。

下面采用某商店的零售數(shù)據(jù)集,通過實際的應(yīng)用場景,來介紹一下style中那些實用的方法。

首先導(dǎo)入相應(yīng)的包和數(shù)據(jù)集

import pandas as pd
import numpy as np

data = data = pd.read_excel('./data/sales.xlsx')
data.head()

數(shù)據(jù)集中的特征有訂單號、顧客姓名、商品名、數(shù)量、單價、金額以及對應(yīng)的購買日期。

輸出格式化

style中的format函數(shù)可以對輸出進(jìn)行格式化,比如在上述的數(shù)據(jù)集中,求每位顧客的消費平均金額和總金額,要求保留兩位小數(shù)并顯示相應(yīng)的幣種。

(data.groupby(['姓名'])['金額'].agg(['mean','sum'])
                             .head(5)
                             .style
                             .format('${0:,.2f}'))

又或求每位顧客的總消費金額(保留2位小數(shù))及其對應(yīng)的占比情況(以百分?jǐn)?shù)形式展現(xiàn))

consumer_sales = data.groupby('姓名')['金額'].agg(['sum']).reset_index()
consumer_sales['消費金額占比'] = consumer_sales['sum'] / consumer_sales['sum'].sum()
(consumer_sales.head(5)
              .style
              .format({'sum':'${0:,.0f}', '消費金額占比': '{:.2%}'}))

突出顯示特殊值

style還可以突出顯示數(shù)據(jù)中的特殊值,比如高亮顯示數(shù)據(jù)中的最大(highlight_max)、最小值(highlight_min)。

#求每個月的銷售總金額,并分別用紅色、綠色高亮顯示最大值和最小值
monthly_sales = data.resample('M',on='日期')['金額'].agg(['sum']).reset_index()
monthly_sales['pct_of_total'] = monthly_sales['sum'] / data['金額'].sum()

format_dict = {'sum':'${0:,.0f}', '日期': '{:%Y-%m}', 'pct_of_total': '{:.2%}'}
(monthly_sales.style
              .format(format_dict)
              .highlight_max(color='#cd4f39')
              .highlight_min(color='lightgreen'))

色階樣式

運用stylebackground_gradient方法,還可以實現(xiàn)類似于Excel的條件格式中的顯示色階樣式,用顏色深淺來直觀表示數(shù)據(jù)大小。

import seaborn as sns

cm = sns.light_palette('green', as_cmap=True)

(data.groupby(['姓名'])[['數(shù)量','金額']]
     .agg(['sum'])
     .head(5)
     .style
     .background_gradient(cmap=cm))

數(shù)據(jù)條樣式

同樣的,對于Excel的條件格式中的數(shù)據(jù)條樣式,可以用style中的bar達(dá)到類似效果,通過顏色條的長短可以直觀顯示數(shù)值的大小。

(monthly_sales.style
              .format(format_dict)
              .bar(color='#FFA07A', vmin=100_000, subset=['sum'], align='zero')
              .bar(color='lightgreen', vmin=0, subset=['pct_of_total'], align='zero')
)

迷你圖

最后介紹一個簡單好用的騷操作——sparklines的運用,它能夠以字符串的形式展現(xiàn)一個迷你的數(shù)據(jù)特征圖。

假設(shè)我現(xiàn)在有一個這樣的需求,就是想看看所有用戶的購買數(shù)量和金額的大體分布情況。

按照往常的思路,可以用可視化的形式繪制出來,但是這樣稍顯復(fù)雜,使用sparklines則可以簡單達(dá)到這種效果。

首先需要安裝sparklines這個包

pip install sparklines

因為需求的實現(xiàn)需要用的groupby函數(shù),所以先定義一個處理函數(shù)

from sparklines import sparklines

# 定義sparklines函數(shù)用于展現(xiàn)數(shù)據(jù)分布
def sparkline_str(x):
    bins = np.histogram(x)[0]
    sl = ''.join(sparklines(bins))
    return sl

# 定義groupby之后的列名
sparkline_str.__name__ = '分布圖'

data.groupby('姓名')[['數(shù)量', '金額']].agg(['mean', sparkline_str])

這樣一來,就比較清晰直觀地展現(xiàn)了每個用戶的消費數(shù)量分布和消費金額分布,進(jìn)而可以根據(jù)這些特征對用戶的消費行為進(jìn)行進(jìn)一步的研究。

sparklines的功能還是挺Cool挺實用的,更具體的用法可以去看看sparklines的文檔。


參考資料:https:///styling-pandas.html

▼點擊成為社區(qū)會員   喜歡就點個在看吧

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲黄色在线观看免费高清| av中文字幕一区二区三区在线| 丝袜破了有美女肉体免费观看| 九九热这里只有精品哦| 久久永久免费一区二区| 最新国产欧美精品91| 东北女人的逼操的舒服吗| 欧美一区二区三区喷汁尤物| 妻子的新妈妈中文字幕| 亚洲一区二区三区在线免费| 老司机精品视频免费入口| 精品欧美日韩一区二区三区 | 青青操成人免费在线视频| 日本成人三级在线播放| 国产乱人伦精品一区二区三区四区 | 国产成人精品一区二区在线看| 亚洲国产欧美久久精品| 老司机亚洲精品一区二区| 成在线人免费视频一区二区| 亚洲男人的天堂就去爱| 亚洲国产一级片在线观看| 成年人黄片大全在线观看| 国产永久免费高清在线精品| 欧美丰满大屁股一区二区三区| 少妇一区二区三区精品| 成人精品一区二区三区在线| 四十女人口红哪个色好看| 不卡视频免费一区二区三区| 大香蕉久久精品一区二区字幕| 欧美日韩最近中国黄片| 日本成人中文字幕一区| 国产精品欧美在线观看| 激情五月综五月综合网| 尤物久久91欧美人禽亚洲| 天堂热东京热男人天堂| 日本精品免费在线观看| 亚洲最新中文字幕在线视频| 色婷婷日本视频在线观看| 91熟女大屁股偷偷对白| 国产一区二区三区色噜噜| 99久久无色码中文字幕免费|