Python:用for循环实现表格数值分色可视化(Jupyter无效果问题)
解决Jupyter Notebook中表格字体颜色不显示的问题
你的代码看不到颜色的核心原因是:termcolor库的colored()函数生成的是终端专用的ANSI颜色转义序列,而Jupyter Notebook通过HTML渲染表格,无法识别这种格式,自然看不到颜色。此外,代码里还存在未定义变量tabla_formateada的错误,导致无法正常生成表格。
修正方案1:手动构建HTML表格(适配你的原代码逻辑)
直接用HTML的CSS样式设置字体颜色,替代termcolor:
import pandas as pd from IPython.display import HTML # 创建示例DataFrame df = pd.DataFrame({ 'Dependencias': ['A', 'B', 'A', 'B', 'C'], 'tiempo': [10, 20, 30, 40, 50] }) # 计算各Dependencias的时间平均值 promedio_tiempo_por_dependencias = df.groupby('Dependencias')['tiempo'].mean() # 计算总平均值 promedio_total = promedio_tiempo_por_dependencias.mean() # 构建HTML表格框架 html_table = '<table border="1"><tr><th>Dependencias</th><th>Promedio de tiempo</th></tr>' # 遍历添加各行,根据数值大小设置颜色 for index, value in promedio_tiempo_por_dependencias.items(): color = 'green' if value < promedio_total else 'red' html_table += f'<tr><td>{index}</td><td style="color: {color};">{value}</td></tr>' # 添加总平均值行,设置蓝色加粗样式 html_table += f'<tr><td style="color: blue; font-weight: bold;">Promedio total</td><td style="color: blue; font-weight: bold;">{promedio_total}</td></tr>' html_table += '</table>' # 在Jupyter中渲染表格 display(HTML(html_table))
修正方案2:用Pandas Styler实现(更简洁高效)
利用Pandas内置的Styler工具,无需手动拼接HTML,代码更易维护:
import pandas as pd from IPython.display import display # 创建示例DataFrame df = pd.DataFrame({ 'Dependencias': ['A', 'B', 'A', 'B', 'C'], 'tiempo': [10, 20, 30, 40, 50] }) # 计算分组平均值并转换为DataFrame promedio_df = df.groupby('Dependencias')['tiempo'].mean().reset_index() promedio_df.columns = ['Dependencias', 'Promedio de tiempo'] # 计算总平均值并添加到表格末尾 promedio_total = promedio_df['Promedio de tiempo'].mean() promedio_df = pd.concat([ promedio_df, pd.DataFrame([{'Dependencias': 'Promedio total', 'Promedio de tiempo': promedio_total}]) ], ignore_index=True) # 定义样式规则函数 def apply_color(val): # 处理总平均值行的样式 if val == 'Promedio total': return 'color: blue; font-weight: bold;' # 处理数值单元格的颜色 try: num_val = float(val) if num_val < promedio_total and val != promedio_total: return 'color: green;' elif num_val > promedio_total: return 'color: red;' else: return 'color: blue; font-weight: bold;' except: return '' # 应用样式并显示表格 styled_table = promedio_df.style.applymap(apply_color) display(styled_table)
内容的提问来源于stack exchange,提问作者Michel_G
相关产品推荐
相关产品推荐

