You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas处理Excel含<的数据并设置单元格红色背景

处理Excel数据并设置样式导出

需求:

  • 处理Excel表格中带“<”的数值:去除“<”后除以2(例如“<0.12”转为0.06)
  • 给所有被处理过的单元格设置红色背景
  • 导出为Excel表格(尽量不含id列)

修改后的代码实现

import pandas as pd
import numpy as np

# 定义列名
COLUMN_NAMES = ['reception_date', 'day', 'PM10', 'PM2,5', 'SO42--S', 'NO3-N', 'HNO3-N+NO3--N', 'NH3-N+NH4+-N']
# 需要处理的目标列
PROCESS_COLUMNS = ['PM10', 'SO42--S', 'NO3-N', 'HNO3-N+NO3--N']

# 读取Excel数据
df = pd.read_excel('data/PRODUCTS.xls', sheet_name='G', names=COLUMN_NAMES)

# 过滤有效数据:剔除day为空的行,跳过第一行无效数据
df = df.dropna(subset=['day']).iloc[1:]

# 创建布尔矩阵,记录哪些单元格是被处理过的
processed_mask = pd.DataFrame(False, index=df.index, columns=PROCESS_COLUMNS)

# 批量处理目标列数据
for col in PROCESS_COLUMNS:
    def process_single_value(x):
        if isinstance(x, str) and '<' in x:
            # 标记该单元格为已处理
            processed_mask.loc[x.name, col] = True
            # 清理格式并计算新值
            clean_num = float(x.replace('<', '').replace(',', '.')) / 2
            return clean_num
        try:
            # 处理普通数值(包含逗号分隔的格式)
            return float(x.replace(',', '.') if isinstance(x, str) else x)
        except:
            # 转换失败返回空值
            return np.nan
    
    df[col] = df[col].apply(process_single_value)

# 定义样式规则:给处理过的单元格设置红色背景
def highlight_processed_cells(row):
    styles = []
    for col in PROCESS_COLUMNS:
        if processed_mask.loc[row.name, col]:
            styles.append('background-color: red')
        else:
            styles.append('')
    return styles

# 应用样式到数据框
styled_data = df.style.apply(highlight_processed_cells, axis=1)

# 导出Excel:设置index=False去除索引列(避免id类列出现)
styled_data.to_excel('processed_result.xlsx', index=False)

关键说明

  • 用**布尔矩阵processed_mask**替代自定义类,更适配Pandas的样式渲染逻辑,方便标记处理过的单元格
  • 统一处理数值格式:自动替换逗号为小数点,避免欧洲式数字格式导致的转换错误
  • 通过df.style实现单元格背景色设置,直接对接Excel导出功能
  • 导出时通过index=False剔除索引列,满足“尽量不含id列”的需求

内容的提问来源于stack exchange,提问作者docwho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:26:27