Numpy противоречивые результаты с пандами и пропущенными значениями - PullRequest
5 голосов
/ 12 марта 2019

Почему numpy возвращает разные результаты с пропущенными значениями при использовании серии Pandas по сравнению с доступом к значениям серии, как показано ниже:

import pandas as pd
import numpy as np

data = pd.DataFrame(dict(a=[1, 2, 3, np.nan, np.nan, 6]))
np.sum(data['a'])

#12.0

np.sum(data['a'].values)
#nan

1 Ответ

5 голосов
/ 12 марта 2019

Вызов np.sum для панд делегатов Серии на Series.sum, который игнорирует NaN при вычислении суммы (ПО УМОЛЧАНИЮ).

data['a'].sum()
# 12.0

np.sum(data['a'])
# 12.0

Вы можете увидеть это из исходного кода np.sum:

np.sum??

def sum(a, axis=None, dtype=None, out=None, keepdims=np._NoValue, initial=np._NoValue):
    ...
    return _wrapreduction(a, np.add, 'sum', axis, dtype, out, keepdims=keepdims,

Взглянув на исходный код _wrapreduction, мы увидим:

np.core.fromnumeric._wrapreduction??

def _wrapreduction(obj, ufunc, method, axis, dtype, out, **kwargs):
    ...
    if type(obj) is not mu.ndarray:
        try:
            reduction = getattr(obj, method)   # get reference to Series.add 

reduction затем окончательно вызывается в конце функции:

            return reduction(axis=axis, out=out, **passkwargs)           
...