Pandas筛选A列为NaN且B列<100的行报错解决方法
报错原因
你的代码里df[df['A'].isna()]返回的是A列为空的子DataFrame,不是逐行的布尔判断结果,和返回布尔序列的df['B'] < 100做按位与运算时类型、维度都不匹配,就会触发这个类型报错。传给df.loc做行筛选的参数,必须是和原DataFrame行数完全一致的布尔序列,不能传截取后的子表。
正确实现代码
# 构造逐行匹配的布尔筛选掩码 filter_mask = df['A'].isna() & (df['B'] < 100) # 筛选符合条件的行,加copy避免链式赋值警告 dff = df.loc[filter_mask].copy() # 新增注释列 dff['Comments'] = 'Damaged item'
运行后得到的dff和你预期的输出完全一致:
Date A B Comments 1 2022-05-01 08:01:00 NaN 54 Damaged item
编写筛选条件的注意事项
- 多条件组合时,每个单独的判断逻辑直接基于列做布尔运算即可,不要在条件里嵌套
df[筛选条件]的子表截取写法 - 涉及
&(与)、|(或)的多条件组合,每个独立判断建议用括号包裹,避免运算符优先级导致逻辑错误 - 筛选后如果要对结果新增/修改列,建议调用
.copy()生成独立的新DataFrame,避免触发pandas的链式赋值警告
内容的提问来源于stack exchange,提问作者user3118602
相关产品推荐
相关产品推荐

