使用Pandas为Excel表格添加条件背景色失败问题排查
问题分析与修正
你的代码存在几个关键问题导致背景色未生效:
- 未保存样式对象:
df_data.style.apply()会返回一个Styler对象,原DataFramedf_data并不会被修改,直接调用df_data.to_excel()只会导出原始数据,不会包含样式。 - axis参数设置错误:你设置了
axis=0(按列处理),但需求是根据列值给整行设置样式,应该使用axis=1(按行处理),此时lambda函数的参数x代表每一行数据。 - 错误引用全局DataFrame:lambda函数里直接使用
df_data.TIME_DIFFERENCE,这会遍历整个列的数据,而不是当前行的对应值,应该改用当前行的列值。 - 保存方式错误:需要调用
Styler对象的to_excel()方法,而非原DataFrame的方法。
修正后的代码
df_data = pd.read_sql(DATA_FETCH_QUERY, con=self.database_util.db_conn) # 定义整行高亮的样式函数 def highlight_rows(row): diff = row['TIME_DIFFERENCE'] # 注意列名需与你的DataFrame实际列名一致 if diff > 15: return ['background: red'] * len(row) elif 10 < diff <= 15: return ['background: yellow'] * len(row) else: return ['background: white'] * len(row) # 应用样式并导出带格式的Excel styled_df = df_data.style.apply(highlight_rows, axis=1) styled_df.to_excel(FILE_PATH, index=False)
补充说明
- 样式函数
highlight_rows接收每一行数据,根据TIME_DIFFERENCE的值返回与行长度匹配的样式列表,确保整行都被设置对应背景色。 - 如果你的DataFrame列名是
Time_Difference(与数据示例一致),请将代码中的TIME_DIFFERENCE改为对应名称,避免键不存在的错误。
内容的提问来源于stack exchange,提问作者Nandu
相关产品推荐
相关产品推荐

