在Pandas DataFrame中识别行内不一致值(忽略缺失值)
解决Pandas行内非缺失值不一致的标记问题
要实现忽略缺失值、标记行内非缺失值不一致的行,你可以直接利用nunique()方法的dropna=True参数,计算每行非缺失值的唯一值数量,再判断该数量是否大于1即可。
示例代码
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'Col1': ['Cell1', 'A', 'B', np.nan], 'Col2': ['Cell2', 'A', np.nan, 'C'], 'Col3': [np.nan, 'A', 'B', 'C'] }) # 标记存在不一致非缺失值的行 df['has_inconsistency'] = df.nunique(axis=1, dropna=True) > 1
结果说明
运行后得到的DataFrame如下:
| Col1 | Col2 | Col3 | has_inconsistency |
|---|---|---|---|
| Cell1 | Cell2 | NaN | True |
| A | A | A | False |
| B | NaN | B | False |
| NaN | C | C | False |
nunique(axis=1, dropna=True)会跳过每行的缺失值,只统计非缺失值的唯一值数量- 当唯一值数量大于1时,说明该行存在不一致的非缺失值,标记为
True - 整行全为缺失值时,
nunique返回0,不会被标记为不一致
替代方案(若需更精细控制)
如果需要自定义判断逻辑,可以用apply结合dropna手动处理:
def check_inconsistency(row): non_null_vals = row.dropna() return len(non_null_vals.unique()) > 1 df['has_inconsistency'] = df.apply(check_inconsistency, axis=1)
这个方法和nunique方案效果一致,适合需要扩展逻辑的场景。
内容的提问来源于stack exchange,提问作者Lucy Asar
相关产品推荐
相关产品推荐

