Je suis tombé sur cela en essayant de trouver les moyens / sommes d’éléments non-nan dans les rangées d’un pandas
trame de données. Il paraît que
df.apply(np.mean, axis=1)
fonctionne bien
Cependant, en appliquant np.mean
à un numpy
tableau contenant nans renvoie un nan.
Est-ce que tout cela est spécifié quelque part? Je ne voudrais pas être brûlé sur la route ...
Réponses:
2 pour la réponse № 1La fonction moyenne de numpy vérifie d’abord si son entrée a une méthode moyenne, comme l'explique @EdChum dans cette réponse.
Lorsque vous utilisez df.apply
, l’entrée passée à la fonction est un pandas.Series. Puisque pandas.Series a une méthode moyenne, numpy l’utilise au lieu d’utiliser sa propre fonction. Et par défaut, pandas.Series.mean ignore NaN.
Vous pouvez accéder au tableau numpy sous-jacent par l'attribut values et le transmettre à la fonction:
df.apply(lambda x: np.mean(x.values), axis=1)
cela utilisera la version de numpy.
1 pour la réponse № 2
Divakar a correctement suggéré d'utiliser np.nanmean
Si je peux répondre à la question toujours en suspens, la sémantique diffère parce que Numpy prend en charge les tableaux masqués, tandis que Les pandas ne le font pas.