Python常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总
目录
- 一.数据的概览与清洗
- 1.数值类型的判断和转换
- 2.冗余数据的判断和处理
- 3.缺失数据的判断与处理
- 二.多表合并与连接
- 1.合并函数concat
- 2.连接函数merge
- 三.数据的汇总
- 1.数据透视表
- 2.分组聚合操作
内容概览:
本文主要介绍有关数据探索和处理的常用技术,包括“脏”数据的判别与清洗、数据子集的筛选、多表之间的操作以及分组统计方法。
由于针对具体操作相关文档太多,所以本文内容涉及具体操作较少,主要是讲方法。
- 2020.07.16新增使用sklearn的数据预处理方法
本文内所用到的包:
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
一.数据的概览与清洗
读入数据:data3=pd.read_excel(‘data3.xlsx’),本节之后操作以data3为基础
1.数值类型的判断和转换
拿到一个数据后,通常需要进行如下操作,这也是一个最常用的操作顺序。
print(data3.shape)#查看数据的规模 (3000, 6)
print(data3.head())
print(data3.dtypes)#查看表中各变量的数据类型
根据实际情况转换数据类型
data3[‘id’]=data3[‘id’].astype(str)
data3[‘custom_amt’]=data3[‘custom_amt’].str[1:].astype(float)
data3[‘order_date’]=pd.to_datetime(data3[‘order_date’],format="%Y年%m月%d日")
print(data3.dtypes)
print(data3.head())
2.冗余数据的判断和处理
print(data3.duplicated().any())#False
如果结果为true,可调用drop_duplicates()去掉重复行
3.缺失数据的判断与处理
判断一个数据集是否存在缺失观测值,通常从两个方面入手:一个是变量的角度,即判断每个变量中是否包含缺失值;另一个是数据行的角度,即判断每行数据中是否包含缺失值。
print(data3.isnull().any(axis=0))#判断各变量中是否存在缺失值
print(data3.isnull().sum(axis=0))#各变量中缺失值的数量
print(data3.isnull().sum(axis=0)/data3.shape[0])#各变量中缺失值的比例
对于缺失值的处理,常用的方法为删除法、替换法和插补法
- 删除法:缺失行的比例在5%以内或缺失值所对应的变量在70%左右
- 替换法:直接利用缺失变量的均值、中位数或众数替换该变量中的缺失值
- 插补法:可使用线性回归模型等
使用删除法:
data3.drop(labels='edu',axis=1,inplace=True)#删除缺失率非常高的edu,inplace=True表示原地修改
data3_new = data3.drop(labels=data3.index[data3['age'].isnull()],axis=0)#删除观测值,如删除age变量中所对应的缺失观测值
#或者
data3_new = data3.loc[~data3['age'].isnull(),]#~表示逻辑非
print(data3_new.shape)#查看数据的规模 (2900, 5)
使用替换法
data3.fillna(value={'gender':data3['gender'].mode()[0],#使用性别的众数替换缺失的性别'age':data3['age'].mean()#使用年龄的平均值替换缺失年龄},inplace=True#原地修改数据)
对于使用年龄的平均值替换缺失年龄,也可以用sklearn的数据预处理方法对age缺失值进行处理
data3['age']=SimpleImputer(strategy='mean').fit_transform(data3[['age']])
strategy也可以设置为median或most_frequent来使用中位数或者众数进行替换。
当数据中含有极大值或极小值时,会使得mean()这种方法失效,因为这种情况下均值会受到影响,这种时候可以使用中位数做兜底策略。
替换法虽然简单高效,但是其替换的值往往不具有很高的准确性,于是出现了插补方法
插补法详情见:
Python——线性回归模型的应用
其中4.含有离散变量的回归模型有详细的案例说明
二.多表合并与连接
1.合并函数concat
df1=pd.DataFrame({'name':['张三','李四','王二'],'age':[21,25,22],'gender':['男','女','男']})
df2=pd.DataFrame({'name':['丁一','赵五'],'age':[23,22],'gender':['女','女']})
数据集的纵向合并
df3 = pd.concat([df1,df2],#须将被合并的数据集组合到列表中,否则报错keys=['df1','df2']#借助于该参数区分不同的数据源)
将第一列索引转换为变量
df3.reset_index(level=0,#level用于指定第几个索引列需要转换,0表示第一个索引列inplace=True)
df3.rename(columns={'level_0':'tab_name'},inplace=True)#变量重命名
df3.index=range(df3.shape[0])#重新调整行索引值
数据的纵向合并
df4 = pd.concat([df1,df2])
数据横向合并,仅保留与df2中列索引值一致的数据,类似于交集
df5 = pd.concat([df1,df2],axis=1)\.reindex(df2.index)
2.连接函数merge
该函数最大的缺点是,每次只能操作两张数据表的连接,如果有n张表需要连接,则必须经过n-1次的merge函数使用
df3=pd.DataFrame({'id':[1,2,3,4,5],'name':['张三','李四','王二','丁一','赵五'],'age':[27,24,25,23,25],'gender':['男','男','男','女','女']})
df4=pd.DataFrame({'Id':[1,2,2,4,4,4,5],'score':[83,81,87,75,86,74,88],'kemu':['科目1','科目1','科目2','科目1','科目2','科目3','科目1']})
df5=pd.DataFrame({'id':[1,3,5],'name':['张三','王二','赵五'],'income':[13500,18000,15000]})
要将上面三张表横向扩展到一张宽表中,需要进行两次merge操作
mergel1= pd.merge(left=df3,right=df4,how='left',left_on='id',right_on='Id')
mergel2=pd.merge(left=mergel1,right=df5,how='left')
其中因为第一次的merge结果包含了id变量,所以merge2在merge时会自动挑选完全一致的变量用于表连接
三.数据的汇总
数据如下:
diamonds=pd.read_csv('diamonds.csv',sep=',')
print(diamonds.head(5))
1.数据透视表
- 单个分组变量的统计
pivot_table=pd.pivot_table(diamonds,index='color',values='price',margins=True,margins_name='总计')#默认均值
- 两个分组变量的列联表
pivot_table=pd.pivot_table(diamonds,index='clarity',columns='cut',values='carat',aggfunc=np.size,margins=True,margins_name='总计')#默认均值
2.分组聚合操作
用color和cut分组,统计其余指标指定的函数值
grouped=diamonds.groupby(by=['color','cut'])
result=grouped.aggregate({'color':np.size,'carat':np.mean,'price':np.mean,'face_width':np.max})
调整变量名的顺序
result=pd.DataFrame(result,columns=['color','carat','price','face_width'])
数据集重命名
result.rename(columns={'color':'counts','carat':'min_weight','price':'avg_price','face_width':'max_face_width'},inplace=True)
将行索引变换为数据框的变量
result.reset_index(inplace=True)
Python常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总相关推荐
- 大数据处理技术之hadoop概览
上两个图,可以对热到极致的大数据处理技术有一个基本的认识 大数据处理技术之演进 大数据处理技术之hadoop软件族: hadoop 1 hadoop2 相关软件下面简介: 1 Ambari:Hadoo ...
- python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并
导入需要的包:numpy.pandas import numpy as py import pandas as pd 创建一个表: df = pd.DataFrame({"id": ...
- macbook不能进系统 备份数据_不基于备份和表,生产系统数据误删就能完全恢复?!...
作者介绍 刘宝珍,架构师,目前就职于大型资产管理公司的科技子公司,拥有多年的大型私有云的规划和设计工作经验,熟悉软件的开发流程,目前醉心于研究基于DDD和敏捷的软件的开发模式,对分布式架构有深入的理解 ...
- navicat 表合并查询_MySQL数据表合并去重的简单实现方法
场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...
- Python自动化小技巧10——excel文件批量多sheet表合并
本次案例背景是博主之前实习时遇到的问题,就是有很多个excel表: 每个工作簿里面又有很多sheet子表: 想要把这些子表合并在一起,多个excel工作簿也要合并到一起,手工肯定慢,这种重复性的劳动交 ...
- python删除两个excel表中的相同元素_Python数据处理--删除重复项、数值替换和表合并...
导入需要的包:numpy.pandas import numpy as py import pandas as pd 创建一个表:df = pd.DataFrame({"id":[ ...
- tkinter使用MySQL存数据_我无法从tkinter表单向mysql插入数据
我能很好地连接到我的数据库,总线,不知怎么的,我把它的书写部分搞砸了. 这是我的代码: from tkinter import * from tkinter import messagebox imp ...
- DataWhale 大数据处理技术组队学习task3
四.分布式数据库HBase 1. 产生背景 1.1 Hadoop的局限性 优点:存储结构化.半结构甚至非结构化的数据,是传统数据库的补充,是海量数据存储的最佳方法. 缺陷: 只能进行批处理,并且只能以 ...
- clickhouse大数据分析技术与实战_比Hive快500倍!大数据实时分析领域的黑马
戳蓝字"小强的进阶之路"关注我们哦! 大数据实时分析领域的黑马是ClickHouse一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). clickhouse背景 俄罗斯 ...
最新文章
- 线程关键字、锁、同步集合笔记
- ibatis查询SQL语句返回一个对象,此对象包含一个List属性
- 2017辽宁冬令营-4.蚂蚁
- DataSet写入Excel
- 成功解决AttributeError: module 'tensorflow.python.ops.nn' has no attribute '_seq2seq'
- 成功解决explicit device specific/device:GPU:0' because no supported kernel for GPU devices is available.
- spring4.0:@Configuration的使用
- C#利用NOPI处理Excel的代码
- 【资源】100页机器学习入门完整版,初学者必备!
- android服务的应用,Android学习指南之十四:Service详解及应用实例
- linux 显示套接字统计信息,Linux 命令 - ss: 查看套接字统计信息
- 纯后处理的volumetric light
- html调用阅读模式,easyread.js—给网站开启阅读模式html教程
- uniapp的选择收货地址
- Angular.js(出库列表页)
- 一文了解DataStore(Preferences)
- 优动漫PAINT实用教程——矢量擦除
- 电影《功夫熊猫1》中的管理知识
- 服务器硬盘热插拔检测不到,用过这么多年才知道, 原来有的设备是真的不能热插拔的!...
- python随机排列图片_更改图片中的随机像素,python