Чтобы устранить функцию Python, не реализованную для этого dtype: ошибка [how->mean,dtype->object], ключевые шаги включают проверку типов данных, преобразование нечисловых типов в числовые, использование выборочной агрегации для соответствующих столбцов, управление значениями NaN или использование пользовательских функций в Pandas.
- Когда возникает ошибка?
- Как исправить ошибку
- 1. Проверьте данные для обработки функции
- 2. Преобразуйте данные перед обработкой ошибки notimplementederror
- 3. Функция agg не удалась [how->mean,dtype->object] с использованием выборочного агрегирования
- 4. Обработка значений nan
- 5. С использованием пользовательской функции
Когда возникает ошибка?
Сообщение об ошибке в функции Python не реализовано для этого типа dtype: [how->mean,dtype->object] обычно возникает при попытке выполнить операцию, не подходящую для типа данных объекта, с которым мы работаем. Это распространенная проблема в Python, особенно при манипулировании данными с использованием таких библиотек, как Pandas.
import pandas as pd data = { 'Date': ['2023-07-01', '2023-07-01', '2023-07-02'], 'Item Description': ['Notebook', 'Pen', 'Pencil'], 'Sales Amount': ['$10', 5, '$3'] } sales_df = pd.DataFrame(data) # Attempting to calculate the mean of 'Sales Amount' try: print(sales_df['Sales Amount'].mean()) except Exception as e: print("Error:", e)
Выход:
Error: can only concatenate str(not "int") to str
Ниже приведен снимок экрана, показывающий выходные данные, снятые после запуска кода в редакторе PyCharm.
Как исправить ошибку
Существует пять различных способов обработки функции Python, которая не реализована для этого типа dtype: [how->mean,dtype->object]:
- Проверьте типы данных.
- Преобразование типов данных.
- Выборочная агрегация.
- Обработка значений NaN.
- Используйте пользовательские функции.
Давайте рассмотрим их один за другим, используя несколько наглядных примеров.
1. Проверьте данные для обработки функции
Мы можем использовать df.dtypes для проверки типов данных каждого столбца в нашем фрейме данных. Это помогает определить, какие столбцы вызывают проблему.
import pandas as pd data = {'Age': [25, 40, 30], 'Appointment Date': ['2023-06-01', '2023-06-02', '2023-06-03'], 'Diagnosis Code': ['D123', 'A456', 'B789']} df = pd.DataFrame(data) print(df.dtypes)
Выход:
Age int64 Appointment Date object Diagnosis Code object dtype: object
2. Преобразуйте данные перед обработкой ошибки notimplementederror
Мы можем преобразовать нечисловые столбцы в числовые, если это необходимо, используя pd.to_numeric(), astype(float) или аналогичные функции.
Мы можем обрабатывать нечисловые значения или ошибки во время преобразования, используя такие аргументы, как error=’coerce’, которые заменяют не преобразуемые значения на NaN.
import pandas as pd data = {'Age': [25, 40, 30], 'Appointment Date': ['2023-06-01', '2023-06-02', '2023-06-03'], 'Diagnosis Code': ['D123', 'A456', 'B789']} df = pd.DataFrame(data) df['Diagnosis Code'] = pd.to_numeric(df['Diagnosis Code'], errors='coerce') print(df)
Выход:
Age Appointment Date Diagnosis Code 0 25 2023-06-01 NaN 1 40 2023-06-02 NaN 2 30 2023-06-03 NaN
3. Функция agg не удалась [how->mean,dtype->object] с использованием выборочного агрегирования
Применяйте среднее значение (или другие функции) только к столбцам с числовыми типами данных.
Мы можем использовать условный выбор или метод select_dtypes для изоляции числовых столбцов.
import pandas as pd import numpy as np data = {'Age': [25, 40, 30], 'Appointment Date': ['2023-06-01', '2023-06-02', '2023-06-03'], 'Diagnosis Code': ['D123', 'A456', 'B789']} df = pd.DataFrame(data) numeric_cols = df.select_dtypes(include=[np.number]) print(numeric_cols.mean())
Выход:
Age 31.666667 dtype: float64
4. Обработка значений nan
Если столбцы наших объектов содержат смешанные типы (например, числа и строки) и мы преобразовали их в числовые, обрабатывайте значения NaN, возникающие в результате преобразования.
Мы можем использовать такие методы, как fillna() или dropna(), для обработки значений NaN.
import pandas as pd import numpy as np data = {'Age': [25, 40, 30], 'Appointment Date': ['2023-06-01', '2023-06-02', '2023-06-03'], 'Diagnosis Code': ['D123', 'A456', 'B789']} df = pd.DataFrame(data) df['Income'] = pd.Series([50000, np.nan, 45000]) df['Income'].fillna(df['Income'].mean(), inplace=True) print(df)
Выход:
Age Appointment Date Diagnosis Code Income 0 25 2023-06-01 D123 50000.0 1 40 2023-06-02 A456 47500.0 2 30 2023-06-03 B789 45000.0
5. С использованием пользовательской функции
Для столбцов со смешанными типами данных, где нам все равно необходимо вычислить среднее значение или другие статистические функции, рассмотрите возможность написания пользовательских функций.
import pandas as pd data = {'Age': [25, 40, 30], 'Appointment Date': ['2023-06-01', '2023-06-02', '2023-06-03'], 'Diagnosis Code': ['D123', 'A456', 'B789']} df = pd.DataFrame(data) def custom_mean(column): numeric = pd.to_numeric(column, errors='coerce').fillna(0) return numeric.mean() survey_data = {'Response': ['Yes', 'No', '3', '4', '5']} df_survey = pd.DataFrame(survey_data) print(custom_mean(df_survey['Response']))
Выход:
2.4