Pandas如何仅将指定列中全为0的行的0值替换为NaN
你当前的代码会将目标三列中所有的0都替换为NaN,不符合「仅三列值全为0的行才替换该行三列值」的要求。
你可以先通过布尔掩码筛选出符合替换条件的行,再针对性赋值,实现方案如下:
依赖导入
import pandas as pd import numpy as np
核心实现代码
cols = ['value1', 'value2', 'value3'] # 生成布尔掩码:对应行的三列值全为0时为True mask = (df[cols] == 0).all(axis=1) # 对符合条件的行的目标列赋值为NaN df.loc[mask, cols] = np.nan
完整可运行示例
# 生成示例DataFrame df = pd.DataFrame([{'id': 0, 'value1': 22, 'value2': 1, 'value3': 7}, {'id': 1, 'value1': 0, 'value2': 0, 'value3': 0}, {'id': 2, 'value1': 0, 'value2': 0, 'value3': 0}, {'id': 3, 'value1': 4, 'value2': 1, 'value3': 25}, {'id': 4, 'value1': 5, 'value2': 0, 'value3': 24}, {'id': 5, 'value1': 0, 'value2': 0, 'value3': 3}]) cols = ['value1', 'value2', 'value3'] mask = (df[cols] == 0).all(axis=1) df.loc[mask, cols] = np.nan print(df)
运行后输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

