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

如何修复DataFrame双条件判断中的TypeError并规避浮点类型错误

问题描述

现有如下包含Datetime、kt、CMF列的DataFrame:

Datetime                  kt         CMF
2022-06-09 12:33:00 0.4164263068002197  0.8847680578178683
2022-06-09 12:34:00 0.42792520202792106 0.8725120368719221
2022-06-09 12:35:00 0.5134482518105007  0.8602633894204332
2022-06-09 12:36:00 0.5306221108293145  0.8480020389466362
2022-06-09 12:37:00 0.576460973390728   0.8357518604940146
2022-06-09 12:38:00 0.5787411028480746  0.823494817828331
2022-06-09 12:39:00 0.5941322373815262  0.8112418608843985

需要添加新列sun disk,规则为:当CMF>=0.8且kt>=0.6时标记为non blocked disk,否则标记为blocked disk。

尝试执行以下代码时触发错误:

frames['sun disk'] = np.where((frames['CMF'] >= 0.8 & frames['clearness index (kt)'] >= 0.6 ) , "non blocked" , 'blocked')

错误信息:

TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]

修复方案

1. 修复逻辑运算符优先级与列名错误

错误的核心原因是位运算&的优先级高于比较运算符>=,导致代码先执行0.8 & frames['clearness index (kt)'],将浮点数与布尔数组做位运算,触发类型错误。同时代码中列名clearness index (kt)与实际DataFrame中的kt不符,会导致列不存在问题。

修正后的基础代码:

import numpy as np

frames['sun disk'] = np.where(
    (frames['CMF'] >= 0.8) & (frames['kt'] >= 0.6),
    "non blocked disk",
    "blocked disk"
)
  • 给每个比较条件单独加括号,确保先执行比较运算得到布尔数组,再执行逻辑与运算&
  • 修正列名为实际存在的kt
  • 统一标记文本为需求中的non blocked disk和blocked disk

2. 规避浮点精度问题

由于浮点数存在存储精度误差(比如0.8可能被存储为0.7999999999999999),直接用>=比较可能出现不符合预期的结果,可通过以下两种方式解决:

方式一:使用近似相等判断

借助pandas的isclose函数,允许一定误差范围:

# 构造条件:CMF接近或大于0.8,且kt接近或大于0.6
cmf_condition = pd.isclose(frames['CMF'], 0.8, atol=1e-9) | (frames['CMF'] > 0.8)
kt_condition = pd.isclose(frames['kt'], 0.6, atol=1e-9) | (frames['kt'] > 0.6)
frames['sun disk'] = np.where(cmf_condition & kt_condition, "non blocked disk", "blocked disk")

方式二:四舍五入后比较

如果业务允许,先对浮点数列保留固定小数位再比较:

condition = (frames['CMF'].round(6) >= 0.8) & (frames['kt'].round(6) >= 0.6)
frames['sun disk'] = np.where(condition, "non blocked disk", "blocked disk")

验证结果

根据示例数据,所有行的kt值均小于0.6,因此新列sun disk的所有值都会是blocked disk。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:20