python数据分析之筛除无效数据

最近接了一个数学建模的小项目,其中一问是从大量数据中筛除出错的数据和无效数据,打开Excel一看,好家伙——有二十多万个行,十五列,上百万的数据,无效数据的分布还不均匀,刁钻古怪,这就很让人犯难。

更坑爹的是还有干扰项,这要是用Excel的查找替换功得整到猴年马月去啊,幸好……我们学过流畅的python!

下面我将用python解决上述问题,废话不多说,先上代码。

// 
import numpy as np
import pandas as pd
path = "F:/数学建模/校赛题目/2020校赛C题/附件/附件1.xlsx"
s1 = pd.read_excel(path, sheet_name=0)# 将Excel文件读取到pandas DataFrame中

s1 = s1.values     # 转化为数值形式

s1 = pd.DataFrame(s1)   # 转化为dataframe形式

for each in range(0,16):
    s1 = s1[(s1.iloc[:, each] != 'NULL')]  

print(s1)

l = []
list = [9,10]
for c in range(len(list)):  # 将各元素标准差放到列表

    a = s1.iloc[:, list[c]].std()
    l.append(a)
    print(a, '\n')

p = []
for c in range(len(list)):  # 各元素均值放到列表
    a = s1.iloc[:, list[c]].mean()
    p.append(a)
    print(a,'\n')
for c in range(len(list)):
    themin = p[c] -  l[c] # 可以检查是否存在异常值,一般认为超过两个标准差的数据,就是异常值
    themax = p[c] +  l[c]
    print(themin, '  ', themax)
    s1 = s1[(s1.iloc[:, list[c] ] >= themin) & (s1.iloc[:, list[c] ] <= themax)]  # 选出符合的行
    print(s1)
    print('\n', s1.shape[0], '\n')

path = "F:/数学建模/"  # 保存
s1.to_excel(path+"sheet1.xlsx")

首先在合适的路径读取Excel,再转化为dataframe(大佬的dataframe详解)形式,用s1.iloc提取指定行、指定列数据。(对iloc有兴趣的同学可以看看这个)

// 去除十五列内的无效NULL数据
for each in range(0,16):
    s1 = s1[(s1.iloc[:, each] != 'NULL')]  

分析数据可知在九,十列区分度较高,我们可以选择这两列进行比较。

比较用的是均值加减方差的区间,在区间之中就判断为好数据,最后保存。

代码参考自此

感兴趣的同学可以私信找我要相关数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值