如何用单行if else与for循环批量更新Pandas列的RL、RM值?是否可行?
可行!这样实现单行的条件判断+循环处理
当然可以做到!你已经用列表推导式实现了单个值的保留逻辑,只需要扩展判断条件,就能同时把'RL'和'RM'都保留下来,其他值统一设为'Others'。
直接可用的单行代码
train['MSZoning'] = [x if x in ('RL', 'RM') else 'Others' for x in train['MSZoning']]
简单解释下逻辑
- 这是一个列表推导式,本质就是把for循环和if else逻辑压缩到了一行里
- 遍历
train['MSZoning']的每一个元素x,用x in ('RL', 'RM')检查它是不是我们要保留的两个值之一 - 如果是,就保留原数值
x;不是的话就替换成'Others'
额外提个效率优化小技巧
如果你的数据集比较大,Pandas内置的方法会比列表推导式更快,比如用where方法:
train['MSZoning'] = train['MSZoning'].where(train['MSZoning'].isin(['RL', 'RM']), 'Others')
不过要是你就想坚持用for循环+if else的单行写法,最上面的列表推导式就完全够用啦。
内容的提问来源于stack exchange,提问作者Anesh
相关产品推荐
相关产品推荐

