python 数据清洗学习笔记

2024-08-26 12:38

本文主要是介绍python 数据清洗学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缺失值处理
—删除记录
—数据插补 —–拉格朗日插值法、牛顿插值法
—不处理

查补方法 方法描述
均值/中位数/众数查补 根据属性值的类型,用该属性值的
平均数,/中位数/众数进行查补

使用固定值 将缺失的属性值用一个常量替换,如广州一个
工厂普通外来务工人员的“基本工资” 属性的
员工资标准1895远/月 ,该方法就是使用
固定值

最近临插补 在记录中找到与缺失样本最接近的样本的
该属性值插补

回归方法 对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据简历拟合模型来预测缺失的属值
插值法: 插值法是利用已知点建立合适的差值函数f(x),未知值由对应点Xj,求出的函数值f(xj)近似代替


# encoding=utf-8
from __future__ import division
import numpy as np
import xlwt
import os
#  导入matplot 函数
import matplotlib.pyplot as matplot_pyplot
#  导入拉格朗日插值函数
from scipy.interpolate import lagrangenp.random.seed(12345)
matplot_pyplot.rc('figure', figsize=(10, 6))
from pandas import Series, DataFrame
import pandas as pdnp.set_printoptions(precision=4, threshold=500)
pd.options.display.max_rows = 100
#  缺失值处理---拉格朗日插值法
#  销量数据路径
inputFile = 'd:/data/catering_sale.xls'
#  输出数据路径
outputFile = 'd:/data/sales.xls'
#  读入数据
data = pd.read_excel(inputFile)
#  过滤异常值
data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None# s 为列向量,n 为被插值的位置,k 为取前后的数据个数,默认为5
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 data.columns:for j in range(len(data)):if (data[i].isnull())[j]:  # 如果为空即插值data[i][j] = ployinterp_column(data[i], j)
# data.to_excel(outputFile) # 输出结果,写入文件
# print data### dataframe 合并
# - Merge 方法:根据一个或多个键将不同dataFrame 中的行合并
# - Concat方法:沿一条轴将多个对象堆叠起来# 数据风格的DataFrame 合并
# - Merge
#  - Merge 参数df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data': range(7)})
df2 = pd.DataFrame({'key': ['a', 'b', 'd'],'data2': range(3)})
print 'df1:=\n', df1
print 'df2;=\n', df2pd.merge(df1, df2)pd.merge(df1, df2, on='key')# 2
df3 = pd.DataFrame({'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
print 'df3:=\n', df3
df4 = pd.DataFrame({'rkey': ['a', 'b', 'd'],'data2': range(3)})
print 'df4:=\n', df4
#  内连接
df3_merge_df4 = pd.merge(df3, df4, left_on='lkey', right_on='rkey')
print 'df3_merge_df4:=\n', df3_merge_df4
#  外连接
df1_merge_df2 = pd.merge(df1, df2, how='outer')
print 'df1_merge_df2:=\n', df1_merge_df2
#  左连接
df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],'data1': range(6)})
df2 = pd.DataFrame({'key': ['a', 'b', 'a', 'b', 'd'],'data2': range(5)})
print 'df1:=\n', df1
print 'df2:=\n', df2
#  左连接
df1_left_df2 = pd.merge(df1, df2, on='key', how='left')
print 'df1_left_df2:=\n', df1_merge_df2
#  内连接
df1_inner_df2 = pd.merge(df1, df2, how='inner')
print 'df1_inner_df2:=\n', df1_inner_df2
# 4
left = pd.DataFrame({'key1': ['foo', 'foo', 'bar'],'key2': ['one', 'two', 'one'],'key3': [1, 2, 3]})
right = pd.DataFrame({'key1': ['foo', 'foo', 'bar', 'bar'],'key2': ['one', 'one', 'one', 'two'],'rval': [4, 5, 6, 7]})
print 'left:=\n', left
print 'right:=\n', right
left_merge_right = pd.merge(left, right, on=['key1', 'key2'], how='outer')#
left_on_right = pd.merge(left, right, on='key1')
print 'left_on_right:=\n', left_on_right
left_one_right = pd.merge(left, right, on='key1', suffixes=('_left', '_right'))
print 'left_on_right:=\n', left_on_right# 索引上的合并
#  轴向连接
#  - Numpy 数组 -----concatenation
#  - Pandas 对象 ----concat
#  -- Concat 对象
# 1
left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],'value': range(6)})
right1 = pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])
print 'left1:=\n', left1
print 'right1:=\n', right1
left_index_right = pd.merge(left1, right1, left_on='key', right_index=True)
print 'left_index_right:=\n', left_index_right# 2
lefth = pd.DataFrame({'key1': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'key2': [2000, 2001, 2002, 2001, 2002],'data': np.arange((5.))})
righth = pd.DataFrame(np.arange(12).reshape((6, 2)),index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],[2001, 2000, 2000, 2000, 2001, 2002]],columns=['event1', 'event2']
)
print 'lefth:=\n', lefth
print 'righth:=\n', righth
lefth_merge_righth = pd.merge(lefth, righth,left_on=['key1', 'key2'],right_index=True)
print 'lefth_merge_righth:=\n', lefth_merge_righth
left2 = pd.DataFrame([[1., 2], [3., 4], [5., 6]],index=['a', 'c', 'e'],columns=['Ohio', 'Nevada']
)
right2 = pd.DataFrame([[1., 2], [3., 4], [5., 6]],index=['a', 'b', 'e'],columns=['Ohio', 'Nevada']
)print 'left2:=\n', left2
print 'right2:=\n', right2
left2_right2 = pd.merge(left2, right2, how='outer', left_index=True, right_index=True)
print 'left2_right2:=\n', left2_right2
# 3
left2 = pd.DataFrame([[1., 2], [3., 4], [5., 6]], index=['a', 'c', 'e'],columns=['Ohio', 'Nevada'])
right2 = pd.DataFrame([[7., 8.], [9., 10.], [11., 12.], [13, 14]],index=['b', 'c', 'd', 'e'],columns=['Missouri', 'Alabama'])
print 'left2:=\n', left2
print 'right2:=\n', right2left2_join_right2 = left2.join(right2, how='outer')
print 'left1:=\n', left1
print 'right1:=\n', right1
left1_merge_right1 = pd.merge(left1, right1, left_on='key', right_index=True)
print 'left1_merge_right1:=\n', left1_merge_right1
left1_join_right1 = left1.join(right1, on='key')
print 'left2_join_right2:=\n', left1_join_right1
# 4
another = pd.DataFrame([[7, 8], [9, 10], [11, 12], [16, 17]],index=['a', 'c', 'e', 'f'],columns=['New York', 'Oregon'])
#  多表外连接
left2_join_right2_another = left2.join([right2, another])
print 'another:=\n', another
print 'left2:=\n', left2
print 'right2:=\n', right2
print 'left2_join_right2_another:=\n', left2_join_right2_another
left2_outer_join_right2_another = left2.join([right2, another], how='outer')
print 'left2_outer_join_right2_another:=\n', left2_join_right2_another
#  轴向连接
#  Numpy数组 ---concatenation
#  Panda 对象 --- concat
#  Concat 的参数
arr=np.arange(12).reshape((3,4))
print arrprint 'test'

这篇关于python 数据清洗学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108592

相关文章

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4: