从已有DataFrame按双条件提取新表及NaN值提取报错解决
问题解决方法
一、提取Cardhldr为0或1的行(修复TypeError)
代码报错是因为运算符优先级问题:|(按位或)的优先级高于==,Python会先执行1 | dt['Cardhldr'],导致整数与DataFrame列的类型不兼容运算。
有两种修复方式:
- 给每个条件单独加括号,明确运算顺序:
dt_train = dt.loc[(dt['Cardhldr'] == 1) | (dt['Cardhldr'] == 0)] - 更简洁的方式用
isin()方法,适配多值匹配场景:dt_train = dt.loc[dt['Cardhldr'].isin([0, 1])]
二、提取Cardhldr为NaN的行(修复name 'NaN' is not defined)
Python中NaN不是内置关键字,直接调用会报错;且NaN不能用==判断(NaN与任何值比较结果都是False),必须用专门的空值检测方法。
正确写法有两种:
- 使用pandas的
isna()函数:import pandas as pd dt_test = dt.loc[pd.isna(dt['Cardhldr'])] - 直接调用Series的
isna()方法:dt_test = dt.loc[dt['Cardhldr'].isna()]
若要使用NaN字面量,需导入numpy后用np.nan,但仍推荐上述空值检测方法,可靠性更高。
内容的提问来源于stack exchange,提问作者DatBigD
相关产品推荐
相关产品推荐

