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

Python逐行生成DataFrame新列报错:float与float不支持&运算

问题解决:TypeError: unsupported operand type(s) for &: 'float' and 'float'

错误根源

你代码里的条件判断误用了位运算符&,但Python中布尔逻辑与必须使用and。&是针对整数的位运算操作符,无法对浮点数执行逻辑判断,这直接触发了类型错误。另外你的a函数里存在未定义的变量tvoc,需要替换为传入的参数x。

修正后的代码

1. 修复条件判断与变量问题

把b、c、d函数里的&全部替换成and,同时修正a函数的变量错误:

def b(x):
    return 2.33 if x <= 56 else 2.25 if 56 < x and x <= 111 else 4.6 if 111 < x and x <= 222 else 17.76 if 222 < x and x <= 667 else 668

def c(x):
    return 100 if x <= 56 else 75 if 56 < x and x <= 111 else 50 if 111 < x and x <= 222 else 25 if 222 < x and x <= 667 else 0

def d(x):
    return 0 if x <= 56 else 57 if 56 < x and x <= 111 else 112 if 111 < x and x <= 222 else 223 if 222 < x and x <= 667 else 668

def a(x):
    # 替换未定义的tvoc为传入的参数x
    return 0 if x > 667 else (c(x) - ((x - d(x))/b(x)))

2. 修正apply调用

确保values是你DataFrame中目标列的真实列名(比如假设列名为'target_col'),调用时传入正确列名:

# 替换成你实际的列名,例如 df["A"] = df.apply(lambda x: a(x['target_col']), axis=1)
df["A"] = df.apply(lambda x: a(x[values]), axis=1)

高效优化方案(可选)

apply逐行处理效率较低,大数据量场景下推荐用批量映射方案:

用numpy.vectorize批量处理

import numpy as np

# 将函数转为支持批量运算的向量化函数
vec_b = np.vectorize(b)
vec_c = np.vectorize(c)
vec_d = np.vectorize(d)
vec_a = np.vectorize(a)

# 直接对整列计算,无需逐行遍历
df["A"] = vec_a(df[values])

用pd.cut区间映射(最高效)

import pandas as pd
import numpy as np

# 定义区间边界和对应参数值
bins = [-np.inf, 56, 111, 222, 667, np.inf]
b_values = [2.33, 2.25, 4.6, 17.76, 668]
c_values = [100, 75, 50, 25, 0]
d_values = [0, 57, 112, 223, 668]

# 批量映射得到b、c、d列
df['b'] = pd.cut(df[values], bins=bins, labels=b_values)
df['c'] = pd.cut(df[values], bins=bins, labels=c_values)
df['d'] = pd.cut(df[values], bins=bins, labels=d_values)

# 计算A列,同时处理x>667的特殊情况
df['A'] = np.where(df[values] > 667, 0, df['c'] - ((df[values] - df['d'])/df['b']))

# 可选:删除临时生成的b、c、d列
df.drop(['b', 'c', 'd'], axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:30:48