2
votes

Python se coordonne avec une paire de nans

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


2 commentaires

Voulez-vous dire Aucun ou nan?


Désolé je voulais dire NaN


3 Réponses :


3
votes

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']]


0 commentaires

0
votes

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')]


0 commentaires

0
votes

Vous pouvez utiliser np.argwhere avec pd.isna , comme ceci: XXX

Sortie

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


0 commentaires