資料如下所示
Code Col1 Col2 col3 col4 col5
0 123 5 66 1.7 7
1 123 1 4 12 -8
2 123 9 5 -7 0
3 123 34.4 0 4.789 2
我應該能夠忽略在某些列上應用樣式(例如在這種情況下 col1)不必總是 col1 我應該能夠通過指定列的名稱來忽略它。
并非每一列都應該具有相同的樣式,例如 col 2 和 5 我想用綠色正值和紅色負值著色但是對于 col3 我想用低于 50 的紫色值著色,其余為黃色
實際資料集有幾十個列,每個列的條件不同,著色代碼是列名稱的函式。
我試過的:
import pandas as pd
import numpy as np
df = pd.read_excel('Data.xls', sheet_name='test')
styler = df.style
def _color_red_or_green(val):
color = 'red' if val < 0 else 'green'
return 'color: %s' % color
styler.applymap(_color_red_or_green)
styler.to_excel('Output.xlsx')
但這并沒有給我任何指定列名的方法,盡管它確實將我的所有資料著色為紅色或綠色,但我嘗試將列名作為引數傳遞給 _color_red_or_green
for col in df.dtypes.items():
styler.applymap(_color_red_or_green(col[0]))
并相應調整了功能,但隨后有一個例外,TypeError: the first argument must be callable上styler.to_excel('Output.xlsx')線。
uj5u.com熱心網友回復:
從 1.3.0 版本開始,Pandasapplymap接受一個subset引數:
子集:標簽,類似陣列,IndexSlice,可選
DataFrame.loc[] 的有效 2d 輸入,或者在 1d 輸入或單鍵的情況下,到 DataFrame.loc[:, ],其中列優先,以在應用函式之前將資料限制為。
因此,例如,為了僅在 Excel 輸出檔案中為“Col1”著色,您可以像這樣修改代碼:
styler.applymap(_color_red_or_green, subset=["Col1"])
從那里,您可以定義以下函式:
def colorize(df, cols):
def _color_red_or_green(val):
color = "red" if val < 0 else "green"
return "color: %s" % color
styler = df.style
styler.applymap(_color_red_or_green, subset=cols)
styler.to_excel("Output.xlsx")
然后使用資料框和您選擇的列呼叫它:
colorize(df, ["Col1", "col3"])
它輸出一個 Excel 檔案,其中“Col1”和“col3”值都繪制為綠色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/385044.html
上一篇:如何防止編輯excel檔案?
