Ошибка при вызове метода .mean() из библиотеки pandas

import pandas as pd
dict = {'Company': ['COMP1', 'COMP1', 'COMP2', 'COMP2', 'COMP3', 'COMP3'],
        'Months': ['MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG'],
        'Salary': [2000, 1500, 3000, 5000, 2500, 3500]}
df = pd.DataFrame(dict)
print(df)
df.groupby('Company').mean()

Работал на версии 3.12,думал ошибка в версии перешел на 3.10,всё равно осталась проблема. Пожалуйста помогите,прогерры!!!

File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\generic.py", line 12370, in _stat_function
    return self._reduce(   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\series.py", line 6437, in _reduce
    return op(delegate, skipna=skipna, **kwds)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\nanops.py", line 147, in f
    result = alt(values, axis=axis, skipna=skipna, **kwds)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\nanops.py", line 404, in new_func
    result = func(values, axis=axis, skipna=skipna, mask=mask, **kwargs)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\nanops.py", line 720, in nanmean
    the_sum = _ensure_numeric(the_sum)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\nanops.py", line 1701, in _ensure_numeric
    raise TypeError(f"Could not convert string '{x}' to numeric") TypeError: Could not convert string 'MARAPR' to numeric

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "D:\pyprojects\pythonProject1\pandas&numpy.py", line 245, in <module>
    df.groupby('Company').mean()   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\groupby\groupby.py", line 2452, in mean
    result = self._cython_agg_general(   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\groupby\groupby.py", line 1998, in _cython_agg_general
    new_mgr = data.grouped_reduce(array_func)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\internals\managers.py", line 1470, in grouped_reduce
    applied = sb.apply(func)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\internals\blocks.py", line 393, in apply
    result = func(self.values, **kwargs)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\groupby\groupby.py", line 1995, in array_func
    result = self._agg_py_fallback(how, values, ndim=data.ndim, alt=alt)   File "C:\Users\respu\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\groupby\groupby.py", line 1946, in _agg_py_fallback
    raise type(err)(msg) from err TypeError: agg function failed [how->mean,dtype->object]

Ответы (1 шт):

Автор решения: MarianD

Ошибка состоит в том, что после группировки остается столбец Months, который содержит не числа, а строки — как из них вычислить среднюю величину?

Решение — существуют 2 возможности:

  1. Ограничиться на столбец Salary - так:

    df.groupby('Company')['Salary'].mean()
    

    или сокращeнно как:

    df.groupby('Company').Salary.mean()
    

    Эти команды выводят серию:

    Company
    COMP1    1750.0
    COMP2    4000.0
    COMP3    3000.0
    Name: Salary, dtype: float64
    

    Когда вы хотите вывести датаврейм, примените пары квадратных скобок:

    df.groupby('Company')[['Salary']].mean()
    
             Salary
    Company        
    COMP1    1750.0
    COMP2    4000.0
    COMP3    3000.0
    

  1. Ограничиться на все численные столбцы (что в вашем случае — с только одним таким столбцом — выдает тот же самый результат) применением параметра numeric_only=True:

    df.groupby('Company').mean(numeric_only=True)
    

    Как я сказал, вы получите тот же самый датафрейм

             Salary
    Company        
    COMP1    1750.0
    COMP2    4000.0
    COMP3    3000.0
    
→ Ссылка