筛选出NaN数量超过一定数量的行

AMM*_*AMM 5 python filter dataframe pandas

在Pandas数据框中,我想过滤出所有大于2 NaNs 的行。

本质上,我有4列,我只想保留至少2列具有有限值的那些行。

有人可以建议如何实现这一目标吗?

jpp*_*jpp 8

您在这里说了2个稍有不同的问题。在一般情况下,他们有不同的答案。

我只想保留至少两列具有有限值的那些行。

df = df.dropna(thresh=2)
Run Code Online (Sandbox Code Playgroud)

这样可以使行具有2个或多个非null值


我想过滤出所有超过2个的行 NaNs

df = df.dropna(thresh=df.shape[1]-2)
Run Code Online (Sandbox Code Playgroud)

这将筛选出具有2个或多个null值的行

在示例的4列数据框中,这些操作是等效的,因为df.shape[1] - 2 == 2。但是,您会发现数据框没有正好有4列的差异。


注意,如果您希望在应用阈值时仅包括指定的列,则dropna还有一个subset参数。例如:

df = df.dropna(subset=['col1', 'col2', 'col3'], thresh=2)
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 7

以下应该工作

df.dropna(thresh=2)
Run Code Online (Sandbox Code Playgroud)

查看在线文档

我们在这里所做的是删除任何NaN行,其中一行中有2个或更多非NaN值。

例:

In [25]:

import pandas as pd

df = pd.DataFrame({'a':[1,2,NaN,4,5], 'b':[NaN,2,NaN,4,5], 'c':[1,2,NaN,NaN,NaN], 'd':[1,2,3,NaN,5]})

df

Out[25]:

    a   b   c   d
0   1 NaN   1   1
1   2   2   2   2
2 NaN NaN NaN   3
3   4   4 NaN NaN
4   5   5 NaN   5

[5 rows x 4 columns]

In [26]:

df.dropna(thresh=2)

Out[26]:

   a   b   c   d
0  1 NaN   1   1
1  2   2   2   2
3  4   4 NaN NaN
4  5   5 NaN   5

[4 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)

编辑

对于上面的示例,它可以工作,但是您应该注意,您必须知道列数并thresh适当地设置值,我原本以为这意味着NaN值的数量,但实际上意味着 NaN值的数量。