我想对数据框进行子类化,这样当我说
时df.loc[index,column] = 'green'
由[index,column]指定的相应值采用该值
'background-color: green'
以为例。
基本上,在将数据帧发送到excel之前,我需要对数据帧进行很多自定义格式化,由于样式器需要使用这些字符串在数据帧中存储样式,因此我想为我要应用的样式创建子类化的数据帧使存储起来更容易。
我希望我的解释有意义。
条件格式对我不利,因为我要获取的许多颜色都是从现有的html表中提取的,因此我必须进行大量的网页抓取工作才能获得这些颜色。
编辑:pandas样式器对象的工作方式是使用一个函数,该函数将要设置样式的df作为输入,并返回另一个带有相同样式的索引和列的数据框。
例如,我有数据框
df
A B C D
first second
A1 2 1 3 2 4
A2 2 5 2 2 3
A3 1 3 4 7 6
A4 4 4 3 3 12
A5 6 2 4 4 7
对于等于2的df值,在将此df导出为excel时,我想使其背景颜色为蓝色。
所以我将创建一个函数
def make_2_blue(df):
background_color = pd.DataFrame('',columns=df.columns,index=df.index)
background_color[df == 2] = 'background-color: blue'
return
然后,当我要将其导出到excel时
df.styler.apply(make_2_blue,axis=None).to_excel('blah.xlsx',engine='openpyxl')
现在在我的示例中,我正在对html进行爬网以获取单个单元格的背景色。
我想做的是将一个数据框子类化,以简化这些格式的应用。
基本上,我想创建一个样式器数据框,在其中指定样式,然后当我访问df中的各个值时,它将接收我的字符串并应用所需的格式。
所以可以说我创建了一个背景色的数据框类。我将创建一个名为background_color_df
的实例。
background_color_df = pd.DataFrame('',index=df.index,columns=df.columns)
>>> background_color_df
A B C \
first second
A1 2 background-color: background-color: background-color:
A2 2 background-color: background-color: background-color:
A3 1 background-color: background-color: background-color:
A4 4 background-color: background-color: background-color:
A5 6 background-color: background-color: background-color:
D
first second
A1 2 background-color:
A2 2 background-color:
A3 1 background-color:
A4 4 background-color:
A5 6 background-color:
现在我要在特定的索引和列处分配蓝色
background_color_df.loc['A1','A'] = 'blue'
background_color_df
A B C \
first second
A1 2 background-color: blue background-color: background-color:
A2 2 background-color: background-color: background-color:
A3 1 background-color: background-color: background-color:
A4 4 background-color: background-color: background-color:
A5 6 background-color: background-color: background-color:
D
first second
A1 2 background-color:
A2 2 background-color:
A3 1 background-color:
A4 4 background-color:
A5 6 background-color:
答案 0 :(得分:0)
如果我的问题正确,那么您的数据如下:
color foo
background green bar
foreground red baz
即,一个数据框具有某种类别的属性,例如前景和背景,您需要将它们组合在一起,例如:
color foo
background background-color: green background-foo: bar
foreground foreground-color: red foreground-foo: baz
请忽略此处的列名和索引名,因为您可以轻松更改它们。
如果这就是您所需要的,则不需要子类DataFrame
,这肯定会花费很多工作。您可以对数据框进行后处理,使其看起来像您想要的。例如。通过这样做:
# example data
df= pd.DataFrame({'color': ['green', 'red'], 'foo': ['bar', 'baz']}, index=['background', 'foreground'])
columns_to_transform= ['color', 'foo'] # maybe even: df.columns if you need to transform all columns
for col in columns_to_transform:
df[col]= df.index + '-' + col + ': ' + df[col]