dropna()不接受thresh参数,并且传递给axis参数的列表

时间:2017-01-05 13:03:09

标签: python pandas nan

我正在尝试使用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(THRESH = 2) 两者都没有改变原来的df。

b)传递给axis参数的列表,表示dropna()应在两个轴上同时运行被忽略。选择轴0,这是默认值。

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

返回:

  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

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

您的建议将不胜感激。

2 个答案:

答案 0 :(得分:4)

dropna按预期工作。

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

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

答案 1 :(得分:0)

正如@Ted Petrou已经提到的那样 - thresh需要许多非NA 值:

所以如果我们只想选择那些至少有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

内部熊猫将使用类似于以下面具的东西:

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