Ошибка при вызове метода .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 возможности:
Ограничиться на столбец
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
Ограничиться на все численные столбцы (что в вашем случае — с только одним таким столбцом — выдает тот же самый результат) применением параметра
numeric_only=True:df.groupby('Company').mean(numeric_only=True)Как я сказал, вы получите тот же самый датафрейм
Salary Company COMP1 1750.0 COMP2 4000.0 COMP3 3000.0