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

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步