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

Pandas编写条件筛选语句时出现KeyError: False报错该如何解决?

问题原因拆解
  • 初始KeyError报错原因:你直接对字符串'DeliveryOnTime'做等值判断,而非取DataFrame的DeliveryOnTime列做判断,'DeliveryOnTime' == "On-time"的结果是固定布尔值False,用布尔值作为列索引取数自然触发KeyError。
  • np.where写法无效原因:你设置的条件成立和不成立的返回值都是1,不管判断结果如何所有行都会赋值为1,没有实现区分效果。
  • .loc写法无效原因:第一你用了逻辑与&要求字段同时等于两个互斥的值,筛选结果为空;第二你对筛选结果做了sum()聚合,返回的是单个数值,会给整列统一赋值为这个数,不是逐行判断的结果。
正确实现方式

以下实现均默认符合条件(值为On-time/Early)时Eligible赋值为1,不符合时赋值为0,你可以根据业务需求调整返回值。

方法1:np.where 实现

import pandas as pd
import numpy as np

# 你的样本数据
data = {'ID': [1, 1, 1, 2, 2, 3, 4, 5, 5],
      'DeliveryOnTime': ["On-time", "Late", "Early", "On-time", "On-time", "Late", "Early", "Early", "On-time"],
     }
df = pd.DataFrame(data)
df['Total Orders'] = df['DeliveryOnTime'].count() 

# 实现赋值
df['Eligible'] = np.where((df['DeliveryOnTime'] == "On-time") | (df['DeliveryOnTime'] == "Early"), 1, 0)

可以用isin简化多值判断逻辑:

df['Eligible'] = np.where(df['DeliveryOnTime'].isin(["On-time", "Early"]), 1, 0)

方法2:.loc 实现

# 先给所有行赋默认值0
df['Eligible'] = 0
# 再给符合条件的行赋值1
df.loc[df['DeliveryOnTime'].isin(["On-time", "Early"]), 'Eligible'] = 1

方法3:布尔值转整数(仅适用于0/1标识场景)

如果只需要用0/1标记是否符合条件,可以直接对布尔结果做类型转换,逻辑更简洁:

df['Eligible'] = df['DeliveryOnTime'].isin(["On-time", "Early"]).astype('int')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:02