从一组选定的行中获取NaN值的索引

时间:2019-07-08 00:05:26

标签: python-3.x pandas

我有一个这样的数据框,

    ID   Cus_ID cl_id
0   5.0  200    0
1   NaN  200    0
2   NaN  200    1
3   14.0 200    2
4   15.0 200    2
5   16.0 200    2
6   NaN  200    3

从上面的数据框中,我想提取第0至4行,并检查“ ID”列中是否有任何值具有NaN值。我尝试过了

rows_needed = [0,1,2,3,4]

df.iloc[rows_needed,0].isnull().index.tolist()

但是我得到以下内容,

[0, 1, 2, 3, 4]

我希望获得[1,2]的索引。如何获得所需的输出?

当我这样做时,

df.iloc[rows_needed,0].isnull()

我明白了

0    False
1     True
2     True
3    False
4    False
Name: ID, dtype: bool

不知道我在哪里犯了错误,没有得到我的输出。

4 个答案:

答案 0 :(得分:3)

您非常接近,您需要做的是将.iloc.loc链接到==TRUE以获得结果

your_indices = (df.iloc[rows_needed]
                .loc[df.ID.isnull()==True]
                .index.tolist())

print(your_indices)
[1, 2]

答案 1 :(得分:3)

让我们将其链接到loc只会选择结果产量True out

rows_needed = [0,1,2,3,4]
df.iloc[rows_needed,0].isnull().loc[lambda x : x].index.tolist()
Out[240]: [1, 2]

答案 2 :(得分:3)

为清晰起见,请执行两个步骤。切片,然后根据该切片进行遮罩。


u = df.iloc[rows_needed, 0]

u[u.isnull()].index.tolist()

[1, 2]

答案 3 :(得分:0)

您可以将index.symmetric_differentdropna一起使用,以查找那些不是NaN的索引,如下所示:

df.iloc[rows_needed,0].dropna().index.symmetric_difference(rows_needed).tolist()

(df.iloc[rows_needed,0].dropna().index ^ rows_needed).tolist()

Out[684]: [1, 2]