如何存储通过pd.dropna(df.dropna(axis = 0))删除的行的行号

时间:2018-07-17 20:22:28

标签: python pandas

示例数据框如下所示

     c1    c2
0    1      2
1    nan    4
2    1      nan
3    4       1
4    nan    nan

使用df.dropna(axis = 0)函数删除后,我希望有一个被删除的行的索引列表,如下所示。

 [1,2,4]

3 个答案:

答案 0 :(得分:5)

您可以使用difference

df.index.difference(df.dropna().index).tolist()
Out[420]: [1, 2, 4]

df.index[df.isnull().any(1)].tolist()
Out[424]: [1, 2, 4]

答案 1 :(得分:3)

您可以使用:

df.index[df.isnull().any(1)].tolist()

输出:

[1, 2, 4]

然后

df = df.dropna(axis=0)

详细信息:

  1. df.isnull()返回值为True的数据框
  2. 接下来将any方法与axis = 1一起使用,以便它在 行,这将返回一个序列,其中index为 数据框,对于任何作为True值的行都为True。
  3. 最后,使用布尔值索引过滤掉那些索引,其中 该系列中的值不是True。

答案 2 :(得分:2)

您可以使用np.where。它将返回您的值为NaN的行和列。

np.where(df.isna())
(array([1, 2, 4, 4]), array([0, 1, 0, 1]))

选择元组的第一项,将其转换为一组,然后返回列表:

list(set(np.where(df.isna())[0]))
[1, 2, 4]