Python与一对nans协调

时间:2019-02-27 12:36:40

标签: python pandas nan

我有一个像这样的数据框

>>df1 = pd.DataFrame({
          'A': ['1', '2', '3', '4', '5'],
          'B': ['1', '1', '1', '1', '1'],
          'C': ['c', 'A1', NaN, 'c3', Nan],
          'D': ['d0', 'B1', 'B2', Nan, 'B4'],
          'E': ['A', Nan, 'S', Nan, 'S'],
          'F': ['3', '4', '5', '6', '7'],
          'G': ['2', '2', NaN, '2', '2']
        })
>>df1

    A   B     C     D     E   F     G
0   1   1     c    d0     A   3     2
1   2   1    A1    B1   NaN   4     2
2   3   1   NaN    B2     S   5   NaN
3   4   1    c3   NaN   NaN   6     2
4   5   1   NaN    B4     S   7     2

,我想获取所有nan的坐标。输出应该是:

[[1,"E"], [2,"C"] , [2,"G"] , [3,"D"] ,[3,"E"] , [4,"C"] ]

我看过的所有其他问题只是想要列名而不是对。

有没有解决此问题的有效方法? 谢谢

3 个答案:

答案 0 :(得分:2)

stack与过滤器索引值一起使用,以减少值:

s = df1.stack(dropna=False)
L = [list(x) for x in s.index[s.isna()]]
print (L)
[[1, 'E'], [2, 'C'], [2, 'G'], [3, 'D'], [3, 'E'], [4, 'C']]

答案 1 :(得分:0)

尝试使用np.where

// Task model
const taskSchema = mongoose.Schema({
// other fields

// dependencies: [{
  types: mongoose.Schema.Types.ObjectId,
  ref: 'Task' // is this possible?at what cost?
}]

})

modules.export = mongoose.model('Task', taskSchema)

np.where返回给定条件为True的索引,此处df为null。

df = pd.DataFrame({'A': ['1', '2', '3', '4','5'],
          'B': ['1', '1', '1', '1','1'],
          'C': ['c', 'A1', np.nan, 'c3',np.nan],
          'D': ['d0', 'B1', 'B2', np.nan,'B4'],
          'E': ['A', np.nan, 'S', np.nan,'S'],
          'F': ['3', '4', '5', '6','7'],
          'G': ['2', '2', np.nan, '2','2']})

arr = np.where(df.isna())
arr
(array([1, 2, 2, 3, 3, 4], dtype=int64),
 array([4, 2, 6, 3, 4, 2], dtype=int64))

答案 2 :(得分:0)

您可以将np.argwherepd.isna结合使用,如下所示:

result = [[r, df1.columns[c]] for r, c in np.argwhere(pd.isna(df1).values)]
print(result)

输出

[[1, 'E'], [2, 'C'], [2, 'G'], [3, 'D'], [3, 'E'], [4, 'C']]