如何在Pandas中仅删除两列均非空且值不同的行?
解决DataFrame行过滤问题
你之前的代码之所以把所有含NaN的行都删掉,核心有两个问题:
- 用
!=比较包含NaN的列时,结果会返回NaN,而drop处理这类布尔序列时,会把NaN对应的行判定为需要删除的对象 - 条件逻辑写反了:你要删除的是「sender_name和receiver_name都非空且数值不同」的行,但
!=得到的是所有不等的行(包括含NaN的情况),完全不符合需求
正确实现方式
我们直接定义需要保留的行的条件:只要sender_name或receiver_name是缺失值,或者两者非空且相等,就保留该行。用布尔索引就能轻松实现:
# 替换成你的DataFrame名称 df = df[(df['sender_name'].isna()) | (df['receiver_name'].isna()) | (df['sender_name'] == df['receiver_name'])]
如果喜欢更简洁的写法,也可以用query方法:
df = df.query("sender_name.isna() or receiver_name.isna() or sender_name == receiver_name")
最终结果
运行后得到的DataFrame会和你期望的一致:
sender_name receiver_name NaN Carl Carl Carl Carlos NaN Peter NaN NaN Matt ...
内容的提问来源于stack exchange,提问作者Olive
相关产品推荐
相关产品推荐

