Ошибка в функции зацикливания для обнаружения выбросов в каждом столбце - PullRequest
0 голосов
/ 11 марта 2020

Я сделал функцию, которая обнаруживает выбросы каждого столбца в наборе данных, вызывать его снова и снова нет необходимости, поэтому я сделал все oop, который выполняет функцию для каждого столбца в наборе данных. Он возвращает ошибку TypeError: unsupported operand type(s) for -: 'numpy.str_' and 'numpy.str_', я не знаю, почему это происходит, это только ошибки, когда я использую l oop, но при вызове его самостоятельно со столбцом в качестве параметра типа detectoutliers(avo_sales.AveragePrice) ошибка не происходит. Как это исправить?

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
import scipy.stats as ss

avo_sales = pd.read_csv('avocados.csv')

avo_sales.rename(columns = {'4046':'small PLU sold',
                            '4225':'large PLU sold',
                            '4770':'xlarge PLU sold'},
                 inplace= True)

avo_sales.columns = avo_sales.columns.str.replace(' ','')

print('Data has some outliers, we''ll''be handling outliers then impute missing values with median')

def detectoutliers(column):
    numbers = sorted(column)
    q1, q3 = np.percentile(column, [25,75] , interpolation='nearest')
    print('Q1,Q3 : ',q1,q3)
    iqr = q3 - q1
    lowerBound = q1 - (1.5 * iqr)
    upperBound = q3 + (1.5 * iqr)
    print('lowerBound,upperBound : ',lowerBound,upperBound)
    print('Detection Success')
    return lowerBound,upperBound

for column in avo_sales.columns[2:11]:
    detectoutliers(column)

1 Ответ

2 голосов
/ 11 марта 2020

Полагаю, это потому, что ваш код

for column in avo_sales.columns[2:11]:
    detectoutliers(column)

работает с именами столбцов вашего фрейма данных. Вы можете изменить его на:

for column in avo_sales.columns[2:11]: detectoutliers(avo_sales[column])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...