[英]Python get coordinate with pair of nans
我有一個這樣的數據框
>>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"] ]
我看過的所有其他問題只是想要列名而不是對。
有什么有效的方法可以解決這個問題? 謝謝
通過缺少值將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']]
嘗試使用np.where :
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))
np.where返回給定條件為True的索引,此處df為null。
[(x, df.columns[y]) for x, y in zip(arr[0], arr[1])]
[(1, 'E'), (2, 'C'), (2, 'G'), (3, 'D'), (3, 'E'), (4, 'C')]
您可以將np.argwhere與pd.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']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.