Python Pandas 查找所有值为 NaN 的所有行
Posted
技术标签:
【中文标题】Python Pandas 查找所有值为 NaN 的所有行【英文标题】:Python Pandas find all rows where all values are NaN 【发布时间】:2016-12-17 11:52:32 【问题描述】:所以我有一个包含 5 列的数据框。我想提取所有列都是 NaN 的索引。我正在使用此代码:
nan = pd.isnull(df.all)
但这只是返回 false,因为它在逻辑上说不是数据框中的所有值都为空。有成千上万的条目,所以我宁愿不必循环检查每个条目。谢谢!
【问题讨论】:
【参考方案1】:应该是:
df.isnull().all(1)
index
可以这样访问:
df.index[df.isnull().all(1)]
演示
np.random.seed([3,1415])
df = pd.DataFrame(np.random.choice((1, np.nan), (10, 2)))
df
idx = df.index[df.isnull().all(1)]
nans = df.ix[idx]
nans
时间
代码
np.random.seed([3,1415])
df = pd.DataFrame(np.random.choice((1, np.nan), (10000, 5)))
【讨论】:
太棒了!非常感谢! 为什么是all(1)
?我看到这是这个问题的正确答案,但我无法理解它。我们有一个 Trues 和 Falses 表,我们想要所有 行 只有(所有)True 值。那么为什么要查看列轴 (1) 而不是索引 (0)?
@Jinx all(1)
很有趣不是吗?如果您尝试简单的旧all()
,或者更明确的all(axis=0)
,您会发现Pandas 会计算每列 的值。通过指定all(1)
,或更明确地指定all(axis=1)
,您正在检查所有值是否每行为空。有关更多详细信息,请参阅all 的文档【参考方案2】:
假设您的数据框名为 df
,您可以使用布尔索引来检查所有列 (axis=1
) 是否为空。然后取结果的索引。
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3))
df.iloc[-2:, :] = np.nan
>>> df
0 1 2
0 1.764052 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 NaN NaN NaN
4 NaN NaN NaN
nan = df[df.isnull().all(axis=1)].index
>>> nan
Int64Index([3, 4], dtype='int64')
【讨论】:
【参考方案3】:来自大师本人:https://***.com/a/14033137/6664393
nans = pd.isnull(df).all(1).nonzero()[0]
【讨论】:
以上是关于Python Pandas 查找所有值为 NaN 的所有行的主要内容,如果未能解决你的问题,请参考以下文章
查找具有 NaN 值的 DataFrame 列表的索引 - Pandas
仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas