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

使用Python拆分Excel数值与单位并计算偏差存入指定列的实现方法

Excel数值单位拆分与偏差计算实现方案

你现有的正则只能匹配整数格式的数值,遇到带小数点、数值与单位间带空格的场景会拆分异常,我们先优化正则匹配规则,再完成完整流程实现。

import openpyxl
import re

# 数值+单位拆分正则,支持小数、数值单位间带空格的场景
split_pattern = re.compile(r'^([\d.]+)\s*([A-Za-z]+)$')

def split_value_unit(cell_value):
    """拆分单元格的数值和单位,返回(浮点数值, 单位),拆分失败返回(None, None)"""
    if not cell_value:
        return None, None
    match_res = split_pattern.match(str(cell_value).strip())
    if match_res:
        val = float(match_res.group(1))
        unit = match_res.group(2)
        return val, unit
    return None, None

# 1. 加载Excel文件,替换为你的实际文件路径
wb = openpyxl.load_workbook('你的输入文件.xlsx')
ws = wb.active  # 如需指定工作表可替换为:wb['工作表名称']

# 2. 写入结果列表头
ws['D1'] = 'Deviation'
ws['E1'] = 'Units'

# 3. 遍历数据行,从第2行开始跳过表头
for row in range(2, ws.max_row + 1):
    # 读取预期值、实际值单元格内容
    expected_cell = ws[f'B{row}'].value
    actual_cell = ws[f'C{row}'].value
    
    # 拆分数值和单位
    exp_val, exp_unit = split_value_unit(expected_cell)
    act_val, act_unit = split_value_unit(actual_cell)
    
    # 处理格式异常场景
    if exp_val is None or act_val is None:
        ws[f'D{row}'] = '数据格式异常'
        ws[f'E{row}'] = '格式异常'
        continue
    
    # 校验两行单位一致性
    if exp_unit != act_unit:
        ws[f'D{row}'] = '单位不匹配'
        ws[f'E{row}'] = f'{exp_unit}/{act_unit}不匹配'
        continue
    
    # 计算偏差并写入结果
    ws[f'D{row}'] = exp_val - act_val
    ws[f'E{row}'] = exp_unit

# 4. 保存处理后的文件,替换为你要输出的路径
wb.save('处理后的结果.xlsx')

注意事项

  • 若你的数据包含负数值,可以把正则修改为 r'^([-\d.]+)\s*([A-Za-z]+)$' 即可支持负数匹配
  • 你可以根据实际需求调整异常场景的提示内容,也可以选择跳过异常行不写入数据
  • 如果B、C列的单位本身就允许不一致,可以去掉单位校验逻辑,自行选择取预期值/实际值的单位存入E列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:03