Skip to main content
 首页 » 编程设计

python之Pandas之删除包含 Nan 的行,然后删除任何关联的行

2025年05月04日22dyllove98

我有一个包含 2 列的数据框:“年龄”和“姓名”。看起来像这样(在记事本中打开时):

,age,name 
0,18,Bill 
1,22,Harry 
2,Nan,Bill 
4,5,William 

(第一列是索引)

我需要删除年龄列中包含 Nan 的所有行,并删除名称列中具有相同名称的所有行。例如,在我的数据框的片段中,我想删除带有 Bill 的两行,因为其中一个年龄包含 Nan

目前我有这个:

df_no_dups = dp[dp.isfinite(dp['age'])] 

这是第一部分,但我坚持删除与包含 Nan 的行同名的其他行

任何帮助都会很棒

请您参考如下方法:

按 boolean indexing 过滤使用 transform 创建的 bool 掩码测试是否 all每组值没有缺失值:

df1 = df[df['age'].notnull().groupby(df['name']).transform('all')] 

或者检查缺失值,测试每组是否至少有一个 True,最后通过 ~ 反转 bool 掩码:

df1 = df[~df['age'].isnull().groupby(df['name']).transform('any')] 

print (df1) 
    age     name 
1  22.0    Harry 
3   5.0  William 

详细信息:

print (df['age'].notnull()) 
0     True 
1     True 
2    False 
3     True 
Name: age, dtype: bool 
 
print (df['age'].notnull().groupby(df['name']).transform('all')) 
0    False 
1     True 
2    False 
3     True 
Name: age, dtype: bool