我制作了一个检测数据集中各列异常值的函数,不需要一遍又一遍地调用它,所以我制作了一个循环,为数据集中的每一列迭代该函数。它返回错误TypeError: unsupported operand type(s) for -: 'numpy.str_' and 'numpy.str_'
,我不知道为什么会这样,它仅在我使用循环时出错,但是当使用像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)
答案 0 :(得分:2)
我想这是因为您的代码
for column in avo_sales.columns[2:11]:
detectoutliers(column)
对数据框的列名进行操作。您可以将其更改为:
for column in avo_sales.columns[2:11]:
detectoutliers(avo_sales[column])