pandas: HTML output with conditional formatting

后端 未结 2 1592
走了就别回头了
走了就别回头了 2020-12-29 04:18

I am trying to format a table, such that data in each column are formatted in a style depending on their values (similar to conditional formatting in spreadsheet programs).

相关标签:
2条回答
  • 2020-12-29 04:21

    Since pandas 0.17.1, it is easy to apply custom formatting to the data frame HTML representation using the styling api.

    import pandas as pd
    
    df = pd.DataFrame({
        'correlation':[0.5, 0.1,0.9],
        'p_value':[0.1,0.8,0.01]})
    styled_df = df.style.apply(
        lambda x: ['font-weight: bold; background-color: yellow'
                   if value <= 0.01 else '' for value in x])
    styled_df
    

    The output is rendered automatically in interfaces such as the Jupyter Notebook and the string representation of the HTML can be returned with the render() method.

    print(styled_df.render())
    
    <style  type="text/css" >
        #T_4e49b9da_8451_11e8_9166_605718a99a7frow2_col1 {
                font-weight:  bold;
                 background-color:  yellow;
                font-weight:  bold;
                 background-color:  yellow;
            }</style>  
    <table id="T_4e49b9da_8451_11e8_9166_605718a99a7f" > 
    <thead>    <tr> 
            <th class="blank level0" ></th> 
            <th class="col_heading level0 col0" >correlation</th> 
            <th class="col_heading level0 col1" >p_value</th> 
        </tr></thead> 
    <tbody>    <tr> 
            <th id="T_4e49b9da_8451_11e8_9166_605718a99a7flevel0_row0" class="row_heading level0 row0" >0</th> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow0_col0" class="data row0 col0" >0.5</td> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow0_col1" class="data row0 col1" >0.1</td> 
        </tr>    <tr> 
            <th id="T_4e49b9da_8451_11e8_9166_605718a99a7flevel0_row1" class="row_heading level0 row1" >1</th> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow1_col0" class="data row1 col0" >0.1</td> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow1_col1" class="data row1 col1" >0.8</td> 
        </tr>    <tr> 
            <th id="T_4e49b9da_8451_11e8_9166_605718a99a7flevel0_row2" class="row_heading level0 row2" >2</th> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow2_col0" class="data row2 col0" >0.9</td> 
            <td id="T_4e49b9da_8451_11e8_9166_605718a99a7frow2_col1" class="data row2 col1" >0.01</td> 
        </tr></tbody> 
    </table>
    
    0 讨论(0)
  • 2020-12-29 04:33

    You can use the DataFrame to_html method, which comes with formatters argument.

    An easier solution would be to surround by <span class="significant"> and </span>, (rather than *). Note: by default this will be escaped (i.e. < becomes &lt;) so you will need to use the escape=False argument.

    0 讨论(0)
提交回复
热议问题