我有一个这样的数据框,
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
不知道我在哪里犯了错误,没有得到我的输出。
答案 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_different
与dropna
一起使用,以查找那些不是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]