Pandas DataFrame筛选多列非空行出现KeyError问题求助
解决Pandas过滤非空行的KeyError问题
嘿,我来帮你搞定这个KeyError的问题!你的代码报错主要有两个原因,咱们一步步来修正:
错误原因拆解
- 多列选择的语法错误:你用了
df['Shop_name','Bikes_available','Shop_location']这种单层方括号加元组的写法,Pandas会把这个元组当成一个单独的列名去查找,自然找不到,所以抛出KeyError。正确的多列选择应该用双层方括号。 - 空值判断的语法错误: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
相关产品推荐
相关产品推荐

