我的DataFrame.mean()中,为何缺了level参数 在网上翻看文档,是应该包含level参数的。

我的DataFrame.mean()中,为何缺了level参数
在网上翻看文档,是应该包含level参数的。

df2 = pd.DataFrame(np.random.randint(0,151,size=(20,3)),
                  columns=['Python','Math','En'],
                  index=pd.MultiIndex.from_product([list('ABCDEFGHIJ'),['期中','期末']]))
df2.mean(level = 1)

报错为:

TypeError                                 Traceback (most recent call last)
Cell In[112], line 4
      1 df2 = pd.DataFrame(np.random.randint(0,151,size=(20,3)),
      2                   columns=['Python','Math','En'],
      3                   index=pd.MultiIndex.from_product([list('ABCDEFGHIJ'),['期中','期末']]))
----> 4 df2.mean(level = 1)

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/core/generic.py:11556, in NDFrame._add_numeric_operations.<locals>.mean(self, axis, skipna, numeric_only, **kwargs)
  11539 @doc(
  11540     _num_doc,
  11541     desc="Return the mean of the values over the requested axis.",
   (...)
  11554     **kwargs,
  11555 ):
> 11556     return NDFrame.mean(self, axis, skipna, numeric_only, **kwargs)

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/core/generic.py:11201, in NDFrame.mean(self, axis, skipna, numeric_only, **kwargs)
  11194 def mean(
  11195     self,
  11196     axis: Axis | None = 0,
   (...)
  11199     **kwargs,
  11200 ) -> Series | float:
> 11201     return self._stat_function(
  11202         "mean", nanops.nanmean, axis, skipna, numeric_only, **kwargs
  11203     )

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/core/generic.py:11154, in NDFrame._stat_function(self, name, func, axis, skipna, numeric_only, **kwargs)
  11152     nv.validate_median((), kwargs)
  11153 else:
> 11154     nv.validate_stat_func((), kwargs, fname=name)
  11156 validate_bool_kwarg(skipna, "skipna", none_allowed=False)
  11158 return self._reduce(
  11159     func, name=name, axis=axis, skipna=skipna, numeric_only=numeric_only
  11160 )

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/compat/numpy/function.py:80, in CompatValidator.__call__(self, args, kwargs, fname, max_fname_arg_count, method)
     78     validate_args(fname, args, max_fname_arg_count, self.defaults)
     79 elif method == "kwargs":
---> 80     validate_kwargs(fname, kwargs, self.defaults)
     81 elif method == "both":
     82     validate_args_and_kwargs(
     83         fname, args, kwargs, max_fname_arg_count, self.defaults
     84     )

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/util/_validators.py:162, in validate_kwargs(fname, kwargs, compat_args)
    140 """
    141 Checks whether parameters passed to the **kwargs argument in a
    142 function `fname` are valid parameters as specified in `*compat_args`
   (...)
    159 map to the default values specified in `compat_args`
    160 """
    161 kwds = kwargs.copy()
--> 162 _check_for_invalid_keys(fname, kwargs, compat_args)
    163 _check_for_default_values(fname, kwds, compat_args)

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pandas/util/_validators.py:136, in _check_for_invalid_keys(fname, kwargs, compat_args)
    134 if diff:
    135     bad_arg = list(diff)[0]
--> 136     raise TypeError(f"{fname}() got an unexpected keyword argument '{bad_arg}'")

TypeError: mean() got an unexpected keyword argument 'level'

参见官方文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.mean.html
也可以看看函数的类型实现:

def mean(
    self,
    axis: Axis | None = ...,
    skipna: _bool | None = ...,
    level: None = ...,  # 类型标注为 None,已废弃
    numeric_only: _bool = ...,
    **kwargs,
) -> Series: ...

这个参数已经被 axis 替代了,所以会报错

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7718186
  • 以下回答由chatgpt基于相关博客总结生成:

    在 DataFrame.mean() 方法中缺少 level 参数可能是由于 Pandas 版本的问题。如果使用的是较早版本的 Pandas,该方法可能没有 level 参数。如果要使用 level 参数,可以升级到较新的 Pandas 版本,或者使用 Pandas 的多级索引(MultiIndex)来实现类似的功能。

    报错的具体原因需要查看错误信息,可以通过查看错误信息定位问题所在,例如是否输入了不合法的参数或缺少必要的参数等等。如果报错信息不够清晰,可以尝试通过调试工具或打印调试信息来查找问题。

    以下是使用 Pandas 的多级索引来实现类似的功能的示例代码:

    import pandas as pd
    
    # 构造一个包含多级索引的 DataFrame
    data = {
        ('A', 'B'): [1, 2, 3],
        ('A', 'C'): [4, 5, 6],
        ('D', 'E'): [7, 8, 9]
    }
    index = pd.Index(['x', 'y', 'z'], name='idx1')
    columns = pd.MultiIndex.from_tuples([('A', 'B'), ('A', 'C'), ('D', 'E')], names=['col1', 'col2'])
    df = pd.DataFrame(data, index=index, columns=columns)
    
    # 对第一级索引计算平均值
    mean_level1 = df.mean(level='idx1')
    print(mean_level1)
    
    # 对第二级索引计算平均值
    mean_level2 = df.mean(level='col2', axis=1)
    print(mean_level2)
    

    运行结果:

    col1     A          D
    col2     B    C     E
    idx1                
    x      1.0  4.0  7.000
    y      2.0  5.0  8.000
    z      3.0  6.0  9.000
    
    idx1
    x    4.0
    y    5.0
    z    6.0
    dtype: float64
    

    这里使用了一个包含多级索引的 DataFrame 对象,并使用 DataFrame.mean() 方法和 level 参数对其中的数据进行了计算。mean_level1 中返回的是针对第一级索引的平均值,mean_level2 中返回的是每一行对应的第二级索引的平均值。需要注意的是,level 参数使用时需要指定要对哪一级索引进行计算,且该索引应为该 DataFrame 对象的一个有效层级。