如何用tidyr删除所有列均为缺失值的行?对比pandas dropna
删除数据框中全缺失行的简便方法(tidyr & pandas)
R 中 tidyr 的实现
你提到的drop_na()默认会删除任意一列存在缺失值的行,但要删除所有列均为缺失值的行,用 tidyverse 有两种直观的方法:
方法1:filter() + if_all()(推荐,tidyverse 风格)
利用if_all()检查每一行的所有列是否都是缺失值,再取反过滤掉这些行:
library(tidyverse) df <- data.frame(a=c(1,NA,2,NA), b=c(3,4,NA,NA)) # 删除所有列全为NA的行 df %>% filter(!if_all(everything(), is.na))
运行结果:
a b 1 1 3 2 NA 4 3 2 NA
方法2:rowSums()统计非缺失值
通过统计每行的非缺失值数量,保留数量大于0的行:
df %>% filter(rowSums(!is.na(.)) > 0)
结果和上面完全一致。
Pandas 中的实现
Pandas 的dropna()确实提供了how参数来灵活控制删除逻辑:
how="any"(默认):删除任意一列有缺失值的行,对应 tidyrdrop_na()的默认行为how="all":删除所有列均为缺失值的行,正是你需要的场景
示例代码:
import pandas as pd df = pd.DataFrame({'a': [1, None, 2, None], 'b': [3, 4, None, None]}) # 删除全缺失行 df.dropna(how="all")
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

