python - 首先检查 NaN,然后根据另一列替换值的函数
问题描述
我正在尝试定义一个函数,该函数根据“MSSubClass”列的值替换“BsmtFinType1”中的值。但是,我希望它首先检查以确保“要替换的值”是 NaN。如果它有一个值,它不会替换它。我不完全确定为什么我的样本不起作用。运行后,没有任何值更新。如果我删除第一个“If”语句,它会运行并替换值就好了。有任何想法吗?
# Fill Basement Finishes
def fills_na(x):
if x['BsmtFinType1'] != np.NaN:
return x['BsmtFinType1']
elif x['MSSubClass'] < 60:
return 'Unf'
else:
return 'GLQ'
all_data['BsmtFinType1'] = all_data.apply(lambda x: bsmt_fin(x), axis=1)
解决方案
好的,我打开了一个python交互环境,发现需要使用~np.isnan(x['BsmtFinType1'])
代替!=
.
造成这种情况的原因是因为 DF 表示 NaN 与 np 默认情况下略有不同,因为它们是不同的类型。
>>> type(np.NaN)
class 'float'
和
>>> type(df['one']['d'])
class 'numpy.float64'
推荐阅读
- javascript - 获取浏览器控制台以在 javascript 文件中显示文件名 + 行号
- java - 如果我知道文件字符串名称,如何访问 R.file?
- python - 如何在 np.where() 的数据框中检查列表中的空元素?
- arduino-uno - 想通过 MAX485 使用 Arduino Uno 读取 VFD 的输出频率
- python - 用 Python 构建图
- ios - 在没有动画的情况下执行 UICollectionView reloadData
- sql-server - 在 SSIS 项目中进行 ETL 过程时,如何在 SCD 转换中映射 varchar(max) 列?
- javascript - 组件在反应钩子中多次重新渲染
- mqtt - 在两个 MQTT 代理之间路由发布消息
- c# - 我的方法中的空引用异常。如何解决?