/ / numpy / pandas confusion de différence NaN - python, pandas, numpy

numpy / pandas confusion de différence NaN - python, pandas, numpy

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 № 1

La 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.