如何在含NaN的Pandas列中执行条件二元替换
Pandas DataFrame指定值替换解决方案
针对需求:保留"A"、将所有非NaN的非"A"值替换为"D"、NaN保持不变,以下是几种高效实现方法:
方法一:结合np.where与pd.notna
通过条件判断精准筛选需要替换的行,避免修改NaN:
import numpy as np import pandas as pd df["col1"] = np.where((pd.notna(df["col1"])) & (df["col1"] != "A"), "D", df["col1"])
逻辑:仅当值**非空且不等于"A"**时替换为"D",其余情况(NaN或"A")保留原内容。
方法二:使用df.loc直接定位修改
利用Pandas的索引定位功能,直接修改目标行:
df.loc[(df["col1"].notna()) & (df["col1"] != "A"), "col1"] = "D"
逻辑:通过布尔索引筛选出需要替换的行,直接赋值为"D",不会影响空值和"A"。
方法三:正则表达式配合replace
用正则匹配所有非"A"的非空字符串进行替换:
df["col1"] = df["col1"].replace(r'^(?!A$).+', "D", regex=True)
逻辑:正则^(?!A$).+匹配所有不是单个"A"的非空值,将其替换为"D",NaN因不匹配正则而保留。
以上三种方法均无需枚举所有非"A"值,适用于非"A"值种类较多的实际场景。
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

