对 Pandas Dataframe 进行单列着色的方法——to_html()

3

在这个问题被标记为重复之前,我已经尝试了以下主题中的代码,但迄今为止都没有起作用:

[给Pandas数据帧染色 ]

[根据多个条件格式化Pandas数据帧中单元格的颜色 ]

[如何在Python数据帧中着色选定的列? ]

我有一段代码可以生成三个类似于这样的Pandas数据帧:

         RowName   Orders   Market  StartTime  StopTime
Status
good     A          9       gold    10:00:00    10:09:45
                             .         
                             .
                             .
bad      B          60      silver  07:54:43    08:02:12

         RowName   Orders   Market  StartTime  StopTime
Status
good     E          19      plat.    10:00:00    10:09:45
                             .         
                             .
bad      F          54      mercury  07:54:43    08:02:12

         RowName   Orders   Market  StartTime  StopTime
Status
great     D          3       alum.   10:00:00    10:09:45
                             .         
                             .
ok        C          70      bronze  07:54:43    08:02:12

Status列被设置为每个帧的索引时

对于每个帧,我想突出显示StartTime列的值为#D42A2A(也就是红色),而不管单元格中的实际值是什么。

这该怎么做?

最近的尝试:

  1. def column_style(col): if col.Name == 'StartTime': return pd.Series('bgcolor: #d42a2a', col.index)

  2. def col_color(data): color = 'red' if data != '' else 'black' return 'color: %s' %color frame.style.applymap(col_color, subset=['StartTime'])

但这些都失败了。

注意:

  1. 我在Linux shell中使用VI

  2. 整个脚本是由IE(Internet Explorer)调用的,因此脚本的输出是HTML

  3. 我正在使用BS(BeautifulSoup)从几个网站爬取数据,并将结果聚合到一个页面上 {*在爬取初始网站并创建所需网站(称其为Page1)后,我尝试在同一脚本中爬取Page1并通过.attrs方法添加HTML行,但这会“失败”,即在运行期间Web服务器超时}

2个回答

5

让我们试试这个:

import pandas as pd
import numpy as np

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})

df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
               axis=1)
df.iloc[0, 2] = np.nan

def highlight_column(s, col):
    return ['background-color: #d42a2a' if s.name == col else '' for v in s.index]

df.style.apply(highlight_column, col = 'B')

输出:

在这里输入图片描述


这是我看到的一种方法,但我还没有完全掌握。你介意把它修改成适用于上面的数据框,即重命名相应的变量吗? - undefined
明白了。尝试了这个方法后,背景仍然是白色的,可惜啊。 - undefined
df.head().to_dict() 这个表达式的输出是什么? - undefined
让我们把这个放到聊天中。 - undefined
1
原来你的 def highlight_column(s, col) 是完全正确的。唯一需要配置的是在调用时。所以调用函数应该是这样的:df.style.apply(highlight_column, col='B').render(table_styles='default')。谢谢! - undefined
显示剩余6条评论

0
如果有人正在使用BeautifulSoup解析网站,然后使用pandas创建一个DataFrame,并且希望为其添加样式,可以像这样操作:
(在使用之前,您已经导入了beautifulsoup,爬取了您的网站并创建了数据框)
variable_name = beautifulsoup(dataframe_name.to_html()) list = []
`for table in variable_name.findAll('table'):`

  `for tbody in variable_name.findAll('table'):`

    `for td in variable_name.findAll('tbody'):`

         `list.append(td)`

list[td_index]['attribute_name'] = 'attribute_value'

这将把您的所有表格数据添加到一个列表中,您可以从该列表中选择任何元素并添加/更新标签属性

(如果有更高效的方法,请在评论中提出以帮助改进)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接