我如何根据我的列名称进行特定样式设置 (pandas)
How can i make specific styling according to my column name (pandas)
数据如下所示
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 我应该能够通过指定列的名称来忽略它。
并非每一列都应具有相同的样式,例如,对于第 2 列和第 5 列,我想用绿色正值和红色负值着色,但是对于第 3 列,我想用低于 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]))
并相应地调整了函数,但随后在 styler.to_excel('Output.xlsx')
行出现异常 TypeError: the first argument must be callable
。
从版本 1.3.0 开始,Pandas applymap
接受一个 subset
参数:
subset : label, array-like, IndexSlice, optional
A valid 2d input to DataFrame.loc[], or, in the case of a 1d input
or single key, to DataFrame.loc[:, ] where the columns are prioritised, to limit data to before applying the function.
因此,例如,为了仅在 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”值都绘制为绿色。
数据如下所示
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 我应该能够通过指定列的名称来忽略它。
并非每一列都应具有相同的样式,例如,对于第 2 列和第 5 列,我想用绿色正值和红色负值着色,但是对于第 3 列,我想用低于 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]))
并相应地调整了函数,但随后在 styler.to_excel('Output.xlsx')
行出现异常 TypeError: the first argument must be callable
。
从版本 1.3.0 开始,Pandas applymap
接受一个 subset
参数:
subset : label, array-like, IndexSlice, optional
A valid 2d input to DataFrame.loc[], or, in the case of a 1d input or single key, to DataFrame.loc[:, ] where the columns are prioritised, to limit data to before applying the function.
因此,例如,为了仅在 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”值都绘制为绿色。