如何过滤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
相关产品推荐
相关产品推荐

