You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤Pandas DataFrame中所有ID字段均为空的行

如何过滤Pandas DataFrame中所有ID字段均为空的行

嗨,我懂你的需求啦——你想要剔除的是所有ID字段(ID1、ID2、ID3)全为空的行,而不是只保留三个都不为空的行对吧?你当前的代码逻辑刚好搞反了,咱们来调整一下~

先回顾下你的原始数据和问题:
你构建的DataFrame是这样的:

import pandas as pd

data = {'ID1': ['BBG01Q69DW37', 'BBG01Q69DW37','BBG01Q69TEST','BBG01Q69TES1'],
        'ID2': ['YU3384903', 'YU3384903','','YU338TES1'],
        'ID3': ['ES0413860877', 'ES0413860877','','ES041386TES1']
        }
df = pd.DataFrame(data)

你之前用的代码是:

df = df[(df['ID1'] != '') & (df['ID2'] != '') & (df['ID3'] != '')]
print(df)

这个逻辑是只保留三个ID都不为空的行,所以会把像BBG01Q69TEST这种有一个ID非空的行也过滤掉,这不符合你的需求。

正确的两种实现方式

方法1:取反“所有ID为空”的条件

我们可以先找出所有三个ID全为空的行,然后用~操作符排除这些行:

# 排除所有ID1、ID2、ID3全为空的行
df_filtered = df[~((df['ID1'] == '') & (df['ID2'] == '') & (df['ID3'] == ''))]
print(df_filtered)

方法2:更简洁的“至少一个ID非空”判断

用any(axis=1)按行检查,只要这三个列里有一个不为空,就保留该行:

# 保留至少有一个ID不为空的行
df_filtered = df[(df[['ID1','ID2','ID3']] != '').any(axis=1)]
print(df_filtered)

最终输出结果

两种方法都会得到你想要的输出,包含BBG01Q69TEST那一行:

ID1        ID2           ID3
0  BBG01Q69DW37  YU3384903  ES0413860877
1  BBG01Q69DW37  YU3384903  ES0413860877
2  BBG01Q69TEST             ES0413860877
3  BBG01Q69TES1  YU338TES1  ES041386TES1

这样就完美实现了你的需求:只要有任意一个ID存在,就保留整行,只剔除那些三个ID全为空的行~

备注:内容来源于stack exchange,提问作者Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:39:31