我正在尝试使用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上研究了这个主题,但我仍然无法弄清楚我做错了什么。
您的建议将不胜感激。
答案 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