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

如何用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"(默认):删除任意一列有缺失值的行,对应 tidyr drop_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:18:14