pd.DataFrame.agg (np.var) против pd.Series.np.var - PullRequest
1 голос
/ 20 сентября 2019

Использование np.var () двумя способами для одного и того же набора данных, но они дают 2 разных результата.Не думайте, что это из-за проблемы n & n-1, так как это та же самая функция numpy для того же набора данных (серия Pandas - SAT Math Scores).

Это 2 способа:

  1. Непосредственно на серию
  2. Использование его с отфильтрованным методом DataFrame + pd.df.agg ()

Однако они дают 2 разных результата.Я читал в другом месте, что это может быть из-за того, как он рассчитывается, то есть n против n-1.

Надеюсь на некоторое подтверждение / уточнение.Я озадачен, поскольку я использую одну и ту же функцию np.var () для обоих случаев:

  1. np.var(sat_2017.Math), np.std(sat_2017.Math)
  2. sat_2017.iloc[:,3].agg([np.var, np.std])

Вывод:

    • Дисперсия: 7068.194540561321
    • Стандартное отклонение: 84.07255521608297
    • Дисперсия:7209,558431
    • Стандартное отклонение: 84,909119

Спасибо заранее!

1 Ответ

0 голосов
/ 20 сентября 2019

Исходя из исходного кода, это выглядит как ошибка.

Когда pd.Series.agg получает объект функции, он ищет его в своем предопределенном списке функций Cython:

# pandas.core.base line:555
f = self._is_cython_func(arg)

# pandas.core.base line:639
def _is_cython_func(self, arg):
    """ if we define an internal function for this argument, return it """
    return self._cython_table.get(arg)

который содержит:

pd.Series._cython_table
OrderedDict([(<function sum(iterable, start=0, /)>, 'sum'),
         ...
         (<function numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)>,'var'),

, который возвращает:

f == self._is_cython_func(arg) == 'var'

Затем он используется на getattr:

# pandas.core.base line 556
if f and not args and not kwargs:
    return getattr(self, f)(), None

, который возвращает:

getattr(pd.Series, 'var')
<function pandas.core.series.Series.var(self, axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)>

И виновник есть!ddof сейчас равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...