Python pd.DataFrame.agg(np.var)与pd.Series.np.var

Python pd.DataFrame.agg(np.var)与pd.Series.np.var,python,python-3.x,pandas,numpy,aggregate,Python,Python 3.x,Pandas,Numpy,Aggregate,以两种方式对同一数据集使用np.var(),但它们给出了两种不同的结果。 不要认为这是因为n&n-1问题,因为它是同一数据集的同一个numpy函数(熊猫系列——SAT数学分数) 以下是两种方式: 直接进入一系列 将其与过滤后的数据帧一起使用+ pd.df.agg()方法 然而,他们给出了两种不同的结果。我在别处读到过,这可能是因为它的计算方式,即nvsn-1 希望得到一些确认/澄清。我很困惑,因为我在两种情况下都使用相同的函数np.var(): np.var(sat\U 2017.Math),n

以两种方式对同一数据集使用np.var(),但它们给出了两种不同的结果。 不要认为这是因为n&n-1问题,因为它是同一数据集的同一个numpy函数(熊猫系列——SAT数学分数)

以下是两种方式:
  • 直接进入一系列
  • 将其与过滤后的数据帧一起使用+ pd.df.agg()方法
  • 然而,他们给出了两种不同的结果。我在别处读到过,这可能是因为它的计算方式,即
    n
    vs
    n-1

    希望得到一些确认/澄清。我很困惑,因为我在两种情况下都使用相同的函数np.var():

  • np.var(sat\U 2017.Math),np.std(sat\U 2017.Math)
  • sat_2017.iloc[:,3].agg([np.var,np.std])
  • 输出:
    • 差异:7068.194540561321
    • 标准偏差:84.07255521608297
    • 差异:7209.558431
    • 标准偏差:84.909119

  • 根据源代码,这似乎是一个bug

    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'),
    
    然后在
    getattr
    中使用:

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

    getattr(pd.Series, 'var')
    <function pandas.core.series.Series.var(self, axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)>
    
    getattr(pd.Series,'var')
    
    罪魁祸首来了<代码>ddof现在为1

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