如何识别有关测试分数的列数据中的异常值以及返回异常值的国家/地区名称

问题描述 投票:0回答:1

〜我做了什么〜

在这项任务的第一部分,我不得不采取数据(从这里:[链接] https://en.wikipedia.org/wiki/Programme_for_International_Student_Assessment_(2000_to_2012))关于数学,科学和阅读成绩,并将它们放在三个单独的图表中,国家名称和分数。

然后我不得不按国家名称组合图表并找到三个分数的平均值。然后我不得不对它们进行排名并按排名顺序排列。

〜我需要做什么〜

接下来,我需要创建一个函数来查找不同列字符串标题的异常值(大于标准差的1.8倍)(平均值,数学分数,科学分数和阅读分数),找到这些分数中的异常值,然后打印出该标题下的异常值的国家/地区。我需要通过一个字符串(平均值,数学分数,科学分数,阅读分数)并获取国家/地区名称列表。

我试图调整先前的赋值,我们必须在一组数据中定位异常值并从数据中删除它们。那个人在寻找均值和标准差方面有很多数学,所以我试着在这里简化它。在这一个中,我只需要找出异常值出现的位置。

tempDF是使用组合图表制作的临时数据框。

tempDF

   def find_outlier(str):
         outliers = []
         found = True
         while found:

             for i in range(len(str)):   

                 mean = (tempDF[str].mean())
                 std = (tempDF[str].std())
                 distance = abs((str[i]-mean)/std)

                 if distance > 1.8:             
                     outliers = outliers.append()   
                     print("The outliers in ", str, " are ", outliers)

                     found=True
                     break
                 found = False

      find_outlier("Average")
      find_outlier("Math Score")
      find_outlier("Science Score")
      find_outlier("Reading Score")

它应该打印“平均值的异常值是''中国上海,中国,','卡塔尔','秘鲁']等等每个类别(平均,数学,科学,阅读)。

我现在得到的错误是“TypeError:无法使用灵活类型执行reduce”。我猜的是列中的数字可能是字符串而不是数字。

python pandas dataframe outliers
1个回答
0
投票
tempDF = pd.DataFrame({'country': ['A']*1000+['B'], 'Income' : [10]*1000+[1000]})

def find_outlier(df, col):
    return df[abs((df[col]-df[col].mean())/df[col].std())>1.8]['country'].values
    # OR
    #return df[np.abs((df[col]-np.mean(df[col]))/np.std(df[col]))>1.8]['country'].values

print ("The outliers in {0} are {1}".format("Income", find_outlier(tempDF, "Income")))

输出:

The outliers in Income are ['B']
© www.soinside.com 2019 - 2024. All rights reserved.