dropna() 不接受 thresh 参数和传递给轴参数的列表

The dropna() does not accept the thresh argument and a list passed to the axis argument

我正在试验 dropna(),已阅读文档。

我创建了一个示例数据框来玩:

        col1    col2    col3    col4
  0      a       1.0    2.0       3
  1      b       NaN    NaN       6
  2      c       NaN    8.0       9
  3      d       NaN    11.0     12
  4      e       13.0   14.0     15
  5      f       17.0   18.0     19
  6      g       21.0   22.0     23

现在我遇到的问题是参数 thresh 和将列表传递给参数轴。

a) 忽略阈值并且 dropna() 未在任何行中运行

    df.dropna(thresh=1)

和 df.dropna(阈值=2) return 原始 df 不变。

b) 传递给 axis 参数的列表指示 dropna() 应该在两个轴上同时操作被忽略。选择轴 0,这是默认设置。

   df.dropna(axis=[0,1]) 

returns:

  col1  col2    col3    col4
0   a   1.0      2.0    3
4   e   13.0    14.0    15
5   f   17.0    18.0    19
6   g   21.0    22.0    23

我仔细阅读了文档并在 Whosebug 上研究了这个主题,但我仍然无法弄清楚我做错了什么。

我们将不胜感激您的建议。

正如 已经提到的 - thresh 需要许多 non-NA 值:

所以如果我们只想 select 那些我们至少有 3 个非 NA 值的行:

In [32]: df.dropna(thresh=3)
Out[32]:
  col1  col2  col3  col4
0    a   1.0   2.0     3
2    c   NaN   8.0     9
3    d   NaN  11.0    12
4    e  13.0  14.0    15
5    f  17.0  18.0    19
6    g  21.0  22.0    23

In [33]: df.dropna(thresh=4)
Out[33]:
  col1  col2  col3  col4
0    a   1.0   2.0     3
4    e  13.0  14.0    15
5    f  17.0  18.0    19
6    g  21.0  22.0    23

内部 Pandas 将使用类似于以下掩码的内容:

In [34]: thresh = 3

In [35]: df.count(1) >= thresh
Out[35]:
0     True
1    False
2     True
3     True
4     True
5     True
6     True
dtype: bool

dropna 正在按预期工作。

对于您的第一个语句 a) df.dropna(thresh=1) 遍历所有行并保留至少有 1 个 non-na 值的每一行。所有行都至少有一个非 na 值,因此不会删除任何内容。 thresh=2 时也是如此 - 所有行至少有 2 个非 na 值。

关于你的第二个问题df.dropna(axis=[0,1]):列表的顺序很重要。在这里,行将先于列被删除。