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

我想检查某些列(大约 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'


忽然笑
浏览 170回答 3
3回答

陪伴而非守候

避免链式索引。在这里您可以使用布尔系列: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)

弑天下

你是这个意思?:df['has_nan'][df['column_name'].isna()] = 0df['has_nan'][~df['column_name'].isna()] = 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python