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

Python pandas for循环筛选列≤6值时报str与int比较TypeError求解

问题解决方案

错误原因

报错TypeError: '<=' not supported between instances of 'str' and 'int'的核心原因是你选中的11个列中存在数据类型为object的列,列内存有字符串类型值,无法直接和整数6做大小比较。你单独测试Pontualidade列正常,仅代表该列是数值类型,不能代表其余10列类型均合法。
另外你的原始代码还存在两处逻辑错误:

  • 计算符合<=6条件行数的代码没有赋值给total_parcial变量,直接调用会抛出变量未定义的错误
  • 原有百分比计算逻辑为df2[coluna].count() / df2[coluna].count(),结果恒等于1,不符合统计要求

修复代码

第一步:统一转换目标列类型为数值型

先将目标列全部转为数值类型,无法转换的异常值自动设为空值NaN,避免比较报错:

import pandas as pd

colunas = list(df2.columns[8:19])
# 批量转换目标列为数值类型
for col in colunas:
    df2[col] = pd.to_numeric(df2[col], errors='coerce')

第二步:修正循环统计逻辑

lista = []
for coluna in colunas:
    nome_coluna = coluna
    # 统计<=6的行数
    total_parcial = df2.loc[df2[coluna] <= 6].shape[0]
    # 统计当前列的有效非空值总数
    total_valido = df2[coluna].count()
    # 计算百分比,增加除以0的异常处理
    percentual = total_parcial / total_valido if total_valido != 0 else 0
    lista.append([nome_coluna, total_parcial, percentual])

df_new = pd.DataFrame(data=lista, columns=['nome_coluna','total_parcial','percentual'])

更高效的向量化实现(无需for循环)

pandas原生支持向量化批量运算,不用循环遍历列,执行效率更高:

# 批量判断所有目标列的值是否<=6
mask = df2[colunas] <= 6
# 按列统计符合条件的行数
total_parcial = mask.sum()
# 按列统计有效非空值总数
total_valido = df2[colunas].count()
# 批量计算百分比
percentual = total_parcial / total_valido.replace(0, pd.NA)
# 生成结果表
df_new = pd.DataFrame({
    'nome_coluna': total_parcial.index,
    'total_parcial': total_parcial.values,
    'percentual': percentual.values
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:05