如何用Pandas .loc统计BAD=1且DELINQ非空的行数?
Pandas实现对应SQL的非空+条件计数逻辑
你需要对应SQL语句:
select count(DELINQ) from DATA where BAD = 1 and DELINQ is not null;
的Pandas实现,可通过在.loc的筛选条件中显式添加非空判断贴合SQL逻辑,以下是完善后的代码:
原代码
import numpy as np import pandas as pd data=pd.read_csv("hmeq_reduced.csv") print('BAD: ',data.loc[data.BAD == 1,"DELINQ"].count()) print('Not Bad: ',data.loc[data.BAD == 0,"DELINQ"].count())
完善后的代码
import numpy as np import pandas as pd data=pd.read_csv("hmeq_reduced.csv") # 显式添加DELINQ非空条件,多个条件用&连接,每个条件需加括号 print('BAD (DELINQ非空): ',data.loc[(data.BAD == 1) & (data.DELINQ.notna()), "DELINQ"].count()) print('Not Bad (DELINQ非空): ',data.loc[(data.BAD == 0) & (data.DELINQ.notna()), "DELINQ"].count())
关键说明
- Pandas中判断非空可用
Series.notna()方法,或全局的pd.notna(Series)函数,二者效果一致 - 多个筛选条件必须用
&(逻辑与)连接,且每个条件需单独加括号(避免运算符优先级导致逻辑错误) - 原代码的
.count()方法本身会自动排除空值(和SQL的count(列名)行为一致),但显式添加非空条件更贴合你熟悉的SQL语法逻辑
样本数据集(hmeq_reduced.csv)
BAD DELINQ 1 0 1 2 1 0 1 0 0 1 0 1 2 1 0 1 2 1 0 1 1 1 1 0 0 0 1 1 1 1 1 6 1 1 0 0 0 1 1 1 0 1 0 1 2 1 0 1 0 0 0 1 0 1 2 0 0
运行结果
BAD (DELINQ非空): 22 Not Bad (DELINQ非空): 5
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

