Python数据分析处理(一)——处理剔除异常值 以全国数学建模(CUMCM 2011 A题)为实例

由于经历一些调试,所以代码结构不一定最优,适合数据处理的新手,大神欢迎提出改进

数据来源:

http://www.mcm.edu.cn

设p为均值,s为标准差

由表三可知,元素背景值在[p-s, p+s],所以应用到表一,将不符合的数据剔除

上代码

import numpy as np
import pandas as pd
path = "E:/Model_building/A/cumcm2011A附件_数据.xls"
s1 = pd.read_excel(path, sheet_name="附件1")
s2 = pd.read_excel(path, sheet_name="附件2")
s3 = pd.read_excel(path, sheet_name="附件3")   # 读入一个文件中的三个表
s1 = s1.values     # 转化为数值形式
s2 = s2.values
s3 = s3.values
s1 = pd.DataFrame(s1)   # 转化为dataframe形式
s2 = pd.DataFrame(s2)
s3 = pd.DataFrame(s3)
print(s1)
s1 = s1.iloc[2:, 0:5]
s2 = s2.iloc[2:, 0:9]
s3 = s3.iloc[2:, :]     # 去掉表头等不需要的部分,如表一的右边
print(s1,'\n')
print(s2,'\n')
print(s3,'\n')
l = []
for c in range(1,9):          # 将各元素标准差放到列表
    a = s2.iloc[: ,c].std()
    l.append( a )
    print(a,'\n')
 
p = []
for c in range(1,9):    # 各元素均值放到列表
    a = s2.iloc[:, c].mean()
    p.append( a )
    
 
for c in range(0,8):         
    themin = p[c] - 2*l[c]
    themax = p[c] + 2*l[c]
    print(themin, '  ', themax)
    s2 = s2[(s2.iloc[:, c+1] >= themin )& (s2.iloc[:, c+1] <= themax ) ]      # 选出符合的行
    print(s2)
    print('\n',s2.shape[0],'\n')
ID = pd.DataFrame(s2.iloc[:, 0])   # 表二0列单独成表
print(ID)
s1 = pd.merge(s1, ID, how="inner", right_on=0, left_on=0)    # 找出表一0列在表二0列的行,merge,join,constack进行拼接
print(s1)
path = "E:/Model_building/A/"  # 保存
s1.to_excel(path+"sheet1.xlsx")
s2.to_excel(path+"sheet2.xlsx")
s3.to_excel(path+"sheet3.xlsx")
 
 

发布了117 篇原创文章 · 获赞 41 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/pangzhaowen/article/details/103941928