我有一个下载.csv的脚本并进行一些操作,然后使用df.to_html以漂亮的html格式通过电子邮件发送熊猫数据帧。
我想通过根据特定列中的文本值突出显示或着色不同的行来增强这些表。
我尝试使用pandas styler,但似乎无法使用to_html将其转换为html。我得到一个“AttributeError:'str'对象没有属性'to_html”
还有另一种方法吗?
举一个例子,我可以说我的DF看起来如下,我想突出显示每个制造商的所有行。即为福特,雪佛兰和道奇使用三种不同的颜色:
Year Color Manufacturer
2011 Red Ford
2010 Yellow Ford
2000 Blue Chevy
1983 Orange Dodge
我注意到我可以将格式化程序传递给to_html但看起来它无法通过着色来完成我想要完成的工作?我希望能够做到这样的事情:
def colorred():
return ['background-color: red']
def color_row(value):
if value is "Ford":
result = colorred()
return result
df1.to_html("test.html", escape=False, formatters={"Manufacturer": color_row})
答案 0 :(得分:0)
令人惊讶的是,回头看它从来没有得到回答我不相信to_html格式化器甚至可以做到这一点。经过多次重访后,我找到了一个非常好的解决方案,我很满意。我没有看到任何接近这个在线的东西,所以我希望这有助于其他人。
d = {'Year' : [2011, 2010, 2000, 1983],
'Color' : ['Red', 'Yellow', 'Blue', 'Orange'],
'Manufacturer' : ['Ford', 'Ford', 'Chevy', 'Dodge']}
df =pd.DataFrame(d)
print (df)
def color_rows(s):
df = s.copy()
#Key:Value dictionary of Column Name:Color
color_map = {}
#Unqiue Column values
manufacturers = df['Manufacturer'].unique()
colors_to_use = ['background-color: #ABB2B9', 'background-color: #EDBB99', 'background-color: #ABEBC6',
'background-color: #AED6F1']
#Loop over our column values and associate one color to each
for manufacturer in manufacturers:
color_map[manufacturer] = colors_to_use[0]
colors_to_use.pop(0)
for index, row in df.iterrows():
if row['Manufacturer'] in manufacturers:
manufacturer = row['Manufacturer']
#Get the color to use based on this rows Manufacturers value
my_color = color_map[manufacturer]
#Update the row using loc
df.loc[index,:] = my_color
else:
df.loc[index,:] = 'background-color: '
return df
df.style.apply(color_rows, axis=None)
输出:
由于我没有在这里嵌入图像的信誉,我是如何通过电子邮件发送它的。我用以下内容将其转换为html。
styled = df.style.apply(color_rows, axis=None).set_table_styles(
[{'selector': '.row_heading',
'props': [('display', 'none')]},
{'selector': '.blank.level0',
'props': [('display', 'none')]}])
html = (styled.render())