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

Pandas DataFrame筛选多列非空行出现KeyError问题求助

解决Pandas过滤非空行的KeyError问题

嘿,我来帮你搞定这个KeyError的问题!你的代码报错主要有两个原因,咱们一步步来修正:

错误原因拆解

  1. 多列选择的语法错误:你用了df['Shop_name','Bikes_available','Shop_location']这种单层方括号加元组的写法,Pandas会把这个元组当成一个单独的列名去查找,自然找不到,所以抛出KeyError。正确的多列选择应该用双层方括号。
  2. 空值判断的语法错误:Python/Pandas里没有NULL这个关键字,判断非空应该用Pandas提供的notnull()方法,而不是!= NULL(这是SQL的写法,Pandas不识别)。

正确的代码实现

要过滤出Shop_name、Bikes_available、Shop_location三列都不为空的行,你可以这样写:

# 先确保多列选择用双层方括号,然后用notnull()判断非空,再按行取全部为True的结果
xtrain = df[df[['Shop_name', 'Bikes_available', 'Shop_location']].notnull().all(axis=1)]

代码解释

  • df[['Shop_name', 'Bikes_available', 'Shop_location']]:正确选中需要检查的三列
  • .notnull():将每一个元素转换为布尔值,非空值返回True,空值返回False
  • .all(axis=1):按行进行判断,只有当该行的三列都为True(即全部非空)时,才返回True
  • 最后用这个布尔数组过滤原DataFrame,得到所有符合条件的行

完整示例(包含数据集构造)

如果需要验证,你可以先构造你的数据集,再运行过滤代码:

import pandas as pd

# 构造你提供的数据集
data = {
    'Shop_name': ['NYC Velo', 'Bike Gallery'],
    'Bikes_available': ['Ninja,hbx', 'dtr,mtg,Harley Davidson'],
    'Shop_location': ['Salida', 'Portland'],
    'Average_price_of_bikes': ['5685$', '6022$'],
    'Rating_of_shop': [4.2, 4.8]
}
df = pd.DataFrame(data)

# 过滤三列均不为空的行
xtrain = df[df[['Shop_name', 'Bikes_available', 'Shop_location']].notnull().all(axis=1)]

# 查看结果
print(xtrain)

运行后会输出保留了所有行的xtrain(因为你的示例数据里没有空值),如果后续数据里出现空行,这个代码会自动过滤掉它们。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:37:52