为了账号安全,请及时绑定邮箱和手机立即绑定

使用基于包含空值的其他列的掩码设置值

使用基于包含空值的其他列的掩码设置值

忽然笑 2021-09-25 10:17:28
我想检查某些列(大约 5 或 6 个),如果所有列都为空,请将另一列has_nan从更改0为1。我知道如何过滤/屏蔽,但是在使用时loc我得到了可怕的SettingWithCopyWarning.这是一个小例子来说明,不完全相同,但它突出了问题:df = pd.DataFrame([np.random.randint(0,100,3), np.random.randint(0,100,3),                 np.random.randint(0,100,3), np.random.randint(0,100,3)],                 columns=['foo', 'bar', 'has_nan'])for i in ['use_1', 'use_2']:    df[i] = 2 * ['5'] + 2 * [np.nan]df.loc[df.use_1.isna() & df.use_2.isna()]['has_nan'] = 'yes'
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

避免链式索引。在这里您可以使用布尔系列:

df['has_nan'] = df[['use_1', 'use_2']].isnull().all(1)

使用布尔值系列,即一种含True/False值仅是在推荐的方法。如果您坚持转换为'yes'/'no'字符串,您可以在后续步骤中通过字典映射进行转换:

mapper = {1: 'yes', 0: 'no'}
df['has_nan'] = df['has_nan'].map(mapper)


查看完整回答
反对 回复 2021-09-25
?
弑天下

TA贡献1818条经验 获得超8个赞

你是这个意思?:


df['has_nan'][df['column_name'].isna()] = 0

df['has_nan'][~df['column_name'].isna()] = 1


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号