J'ai un dataframe comme celui-ci
[[1,"E"], [2,"C"] , [2,"G"] , [3,"D"] ,[3,"E"] , [4,"C"] ]
et j'aimerais obtenir les coordonnées de tous les nans. c'est la sortie devrait être:
>>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
Toutes les autres questions que j'ai regardées veulent juste le nom de la colonne et non les paires.
Y a-t-il un moyen efficace pour résoudre ce problème? Merci
3 Réponses :
Utilisez stack
avec des valeurs d'index de filtre par valeurs manquantes:
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']]
Essayez d'utiliser np.where : XXX
np.where renvoie les indices où la condition donnée est True, ici où df est nul.
[(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')]
Vous pouvez utiliser np.argwhere avec pd.isna , comme ceci: XXX
Sortie
[[1, 'E'], [2, 'C'], [2, 'G'], [3, 'D'], [3, 'E'], [4, 'C']]
Voulez-vous dire Aucun ou nan?
Désolé je voulais dire NaN