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

使用Python为Excel设置条件格式时字符串与整数比较报错如何解决

报错原因

你的代码触发类型错误的核心原因有两个:

  1. 原始数据过滤不彻底:开头的Run1文件头行、空行没有被过滤,这些行全是字符串内容,你给DataFrame全局指定dtype=int根本不会生效,所有列最终还是字符串类型的object格式
  2. 即使过滤了无效行,每一行的第一个元素是AD Averaged xxx(mV)这类描述字符串,本身无法转为整数,全局指定int类型同样会失效,最终你要比较的Vout列的值全是"0001"这类字符串格式的数字,无法直接和整数2做比较
解决方案

按照以下步骤修改代码即可,核心逻辑是先过滤无效数据,再单独给数值列做类型转换:

import pandas as pd
import numpy as np
from openpyxl import load_workbook

# 读取txt文件
with open("Data at 20-5C on(18-11-21)(decoupled).txt", "r", encoding="utf8") as f:
    data = f.readlines()

# 只保留AD Averaged的行,自动过滤RAW行、空行、开头的文件头行
data = ([x.strip().split(',') for x in data if "AD Averaged" in x])
max_len = max([len(i) for i in data])

for row in data:
    if len(row) < max_len:
        row += [''] * (max_len - len(row))

# 先不指定全局dtype,正常构造DataFrame
df = pd.DataFrame(data, columns=['', 'TH+', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', 'VambCorrY'])

# 单独给数值列做类型转换,异常值转为NaN
num_cols = ['TH+', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', 'VambCorrY']
df[num_cols] = df[num_cols].apply(pd.to_numeric, errors='coerce')

# 插入索引列
df.insert(1,'Index', df.index)

stage_threshold = 2

# 着色逻辑加NaN判断,避免空值报错
df_styled = df.style.applymap(
    lambda x: 'background-color: red' if pd.notna(x) and x < stage_threshold else 'background-color: green', 
    subset=['Vout']
)

df_styled.to_excel('Data at 20-5C on(18-11-21)(decoupled).xlsx', engine='openpyxl', index=False)

如果不想提前做类型转换,也可以直接在着色的lambda里临时转类型,修改判断逻辑为int(x) < stage_threshold即可,但提前统一数据类型能避免后续其他操作出现同类问题,更推荐上面的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:02