【问题标题】:Coloring Single Column of Pandas Dataframe.to_html()为 Pandas Dataframe.to_html() 的单列着色
【发布时间】:2019-05-08 14:28:26
【问题描述】:

在这被标记为重复之前,我已经尝试了以下主题的代码,但到目前为止没有一个对我有用:

[Colouring one column of pandas dataframe]

[Format the color of a cell in a panda dataframe according to multiple conditions]

[how to color selected columns in python dataframe?]

我的代码可以生成三个看起来像这样的 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 列设置为每一帧的索引

对于每一帧,我想用值#D42A2A(又名红色)突出显示StartTime 列,而不管给定单元格中的值是什么。

如何做到这一点?

最近失败的尝试:

  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 行,但这“失败”,即网络服务器时间跑步时外出}

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果有人使用 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'

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

    (如果有更有效的方法请评论帮助改进)

    【讨论】:

      【解决方案2】:

      让我们试试这个:

      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')
      

      输出:

      【讨论】:

      • 这是我看到但不能完全掌握的方式之一。你介意编辑它以适用于上面的数据框,即重命名适当的变量
      • 只需将col = 'B' 更改为col='StartTime' 并应用于您的数据框。
      • 明白了。试过这个方法后,不幸的是背景还是白色的
      • df.head().to_dict() 的输出是什么?
      • 事实证明您的def highlight_column(s, col) 完全正确。唯一需要配置的是在调用中。所以调用函数应该是这样的:df.style.apply(highlight_column, col='B').render(table_styles='default')。谢谢!
      猜你喜欢
      • 2017-05-17
      • 2019-01-27
      • 1970-01-01
      • 2021-03-02
      • 2016-04-09
      • 2017-07-03
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多