在juoyter notebook中直接經過df輸出DataFrame時,顯示的樣式爲表格樣式,經過sytle可對錶格的樣式作一些定製,相似excel的條件格式。app
df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) s = df.style print(s,type(s)) #<pandas.io.formats.style.Styler object at 0x000001CD7B409710> <class 'pandas.io.formats.style.Styler'>
對錶格建立樣式有兩種方式,都須要額外定義一個處理樣式的函數dom
①df.style.applymap(func,*args,**kwargs):對DataFrame中的每個元素都按照func的邏輯處理函數
# 將小於0.2的值字體設置爲紅色,不然設置爲黑色 df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) def lt_red(val): if val<0.2: color = 'red' else: color = 'black' # print(color) return ('color:%s'%color) df.style.applymap(lt_red)
②df.style.apply(func,axis=0,subset=**,*args,**kwargs):對DataFrame的行或列按照func的邏輯處理,axis默認爲0按照列處理,1按照行處理。字體
# 將A、C、D列中的每一列最大值背景顏色填充爲黃色 def highlight_max(s): is_max = s == s.max() l = [] for v in is_max: if v: l.append('background-color:yellow') else: l.append('') # print(l) return l df.style.apply(highlight_max,axis = 1,subset = ['A','C','D'])
若是在style中須要同時進行行和列的切片,須要用到pandas的IndexSlicespa
# 對索引爲2-5行,列爲A、C、D中的每一列最大值背景顏色填充爲黃色 df.style.apply(highlight_max,axis=1,subset = pd.IndexSlice[2:5,['A','B','C']]) ## df.loc[2:5,['A','C']].style.apply(highlight_max,axis=1)也能夠實現
## 上一種方法會顯示全部的DataFrame內容,而後對知足條件的行和列作格式處理;然後一種方法是隻顯示知足條件的行和列,再作格式處理
格式化DataFrame中的數值excel
df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) # df.style.format('{:.2%}',subset=['B','C']) #對全部符合條件的採用一種格式format,整個格式用''括起來 df.style.format({'A':'{:.2f}','B':'{:%}','C':'{:+}','D':'{:.2%}'}) #對不一樣的列採用不一樣的format,參數爲一個字典,key爲列名,value爲格式 # A、B、C、D列的格式分別爲2位小數、百分數、前面加+號,2位小數的百分數
定位空值df.style.highlight_null(null_color='red'),對空值設置背景顏色code
對應還有highlight_max()和highlight_min(),參數(subset=None, color='yellow', axis=0)orm
df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) df['B'][2] = np.nan df.style.highlight_null(null_color='red')
色彩映射blog
df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) df.style.background_gradient(cmap='Reds',axis = 1,low = 0,high = 1,subset = ['A','C','D']) # 按行處理,最小值對應顏色表中的最淺色,最大值對應顏色表中的最深色,1表示按行處理
條形圖索引
df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) df.style.bar(width=100,subset=['A','C','D'],color='lightpink')
分段式構建樣式
df.style.\ bar(width=100,subset=['A'],color='lightpink').\ highlight_max(axis = 1,color='red').\ highlight_min(axis = 1,color='green') #除最後一行,每一行都以.\結尾