数据去重 填补空缺值(拉格朗日)
来源:互联网 发布:简明python教程怎么样 编辑:程序博客网 时间:2024/06/05 09:42
此时我是不是该喊一声“我胡汉三又回来啦!!!”
这篇博客容许我摸一下数据清洗的裤脚......
1.首先。
这是在网上找的数据,一个心脏病的数据集,英文不好的默默打开翻译,被我悄悄的做了手脚变成“脏数据”。
2.去重
(1)将文本传入kettle,转换为excel文件
(2)进行去重步骤操作,可以看到有4条重复数据被去除,输出表格。
3.使用拉格朗日填补空缺值(一度读成朗格拉日(๑°ㅁ°๑)‼)
(1)话不多说直接上代码
#coding=utf-8import pandas as pdfrom scipy.interpolate import lagrange # 导入拉格朗日函数inputfile = 'D:/heart0.xls'outputfile = 'D:/heart01.xls' #数据输入输出路径def FillNaN(input, output, k=5): #取k=5 data = pd.read_excel(input, header=None) #读入数据 title = data[:1] #数据列名 data = data[1:] #将列名去掉只取数值 for i in range(len(data.columns)): for j in range(1, len(data)+1): #循环每个值 if j < k : #当被插值位置距第一行<5 y = data[i][list(range(1, j)) + list(range(j+1, j+1+k))] #取数 y = y[y.notnull()] # 剔除空值 if (data[i].isnull())[j]: #遇空值的话 data[i][j] = round(lagrange(y.index, list(y))(j)) #插值并返回插值多项式,代入j得到插值结果,四舍五入 elif (j >= k) and (j < len(data) - k): #位置距第一行>=5,距最后一行>5 y = data[i][list(range(j-k, j)) + list(range(j+1, j+1+k))] y = y[y.notnull()] if (data[i].isnull())[j]: data[i][j] = round(lagrange(y.index, list(y))(j)) elif j >= len(data) - k: #距最后一行<=5 y = data[i][list(range(len(data)-1-2*k, j)) + list(range(j+1, len(data)))] y = y[y.notnull()] if (data[i].isnull())[j]: data[i][j] = round(lagrange(y.index, list(y))(j)) data = pd.concat([title, data]) #将列名和数值合并 data.to_excel(output, header=None, index=False) #输出结果写入文件FillNaN(inputfile, outputfile)
4.错误分析
(1)KeyError: 0L
Traceback (most recent call last):
File "C:/Users/DELL/Desktop/PycharmProject/python/cnki.py", line 54, in <module>
FillNaN(inputfile, outputfile)
File "C:/Users/DELL/Desktop/PycharmProject/python/cnki.py", line 38, in FillNaN
if (data[i].isnull())[j]: #遇空值的话
File "C:\Users\DELL\Anaconda\lib\site-packages\pandas\core\series.py", line 521, in __getitem__
result = self.index.get_value(self, key)
File "C:\Users\DELL\Anaconda\lib\site-packages\pandas\core\index.py", line 1595, in get_value
return self._engine.get_value(s, k)
File "pandas\index.pyx", line 100, in pandas.index.IndexEngine.get_value (pandas\index.c:3113)
File "pandas\index.pyx", line 108, in pandas.index.IndexEngine.get_value (pandas\index.c:2844)
File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:3704)
File "pandas\hashtable.pyx", line 375, in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:7224)
File "pandas\hashtable.pyx", line 381, in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:7162)
KeyError: 0L
问题分析:我开始以为是OL,所以一直没找到错误。其实它是0L,即DataFrame的行是从1开始数的直到最后一行,所以它出这个错误就是你在访问它的值时超过了范围,在正确范围内就可以了。
问题解决:我将访问范围设置为 for j in range(1, len(data)+1):
(2)TypeError: 'Int64Index' object is not callable
Traceback (most recent call last):
File "C:/Users/DELL/Desktop/PycharmProject/python/cnki.py", line 25, in <module>
data[i][j] = ployinterp_column(data[i], j)
File "C:/Users/DELL/Desktop/PycharmProject/python/cnki.py", line 20, in ployinterp_column
return lagrange(y.index(), list(y))(n)
TypeError: 'Int64Index' object is not callable
问题分析:一开始是看书上代码写的,它是先写了一个函数然后填值,看好多网上也是类似这样:
def ployinterp_column(s, n, k=5): y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] y = y[y.notnull()] return lagrange(y.index(), list(y))(n)for i in range(len(data.columns)): for j in range(1,len(data)+1): if (data[i].isnull())[j]: data[i][j] = ployinterp_column(data[i], j)
原因我也不清楚,可能人家的数据能跑出来,我的就不可以(ಥ _ ಥ)
问题解决:将s直接替换为data(i),n换成j.
5.我的平均值填补渣渣链接......http://blog.csdn.net/tt_258/article/details/69359631
- 数据去重 填补空缺值(拉格朗日)
- 填补空缺值(平均值)
- 填补空缺——压缩感知
- PHP 二维数据去重复值方法(去重)
- mysql去空缺排序
- [英语阅读]日本:机器人将填补350万职位空缺
- Oracle数据去重(不是distinct)
- 关于数据去重(distinct)
- 词典去重数据
- hadoop-数据去重
- hive 去重数据
- SQL数据去重
- 数据去重
- 数据去重
- 数据去重程序
- mysql数据去重
- Hadoop 数据去重
- 数据库数据去重
- pthread优先级的实践与结果分析
- 基于Tensorflow的MNIST手写数字识别(三)
- uvm的随机化
- Hibernate 的<generator class="native"></generator>的不同属性含义
- 常见的 sizeof 和 strlen
- 数据去重 填补空缺值(拉格朗日)
- Ubuntu16.04.1安装JDK
- x轴上树立了n块木板,他们的高度为H[i],求任意两块木板和x轴组成的容器,盛水量最大是多少
- 一位SAP培训顾问的建议:SAP HANA应该如何学习?
- jQuery文件上传之之ajaxFileUpload
- Linux下的小程序:进度条
- UDP协议
- java+zxing生成和解析二维码+一步一步详细解释
- 寻找满足下列条件的4位整数:无重复数字,千位数字非0,能整除它的各位数字和的平方。