目录

  • 一.数据的概览与清洗
    • 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常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总相关推荐

  1. 大数据处理技术之hadoop概览

    上两个图,可以对热到极致的大数据处理技术有一个基本的认识 大数据处理技术之演进 大数据处理技术之hadoop软件族: hadoop 1 hadoop2 相关软件下面简介: 1 Ambari:Hadoo ...

  2. python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并

    导入需要的包:numpy.pandas import numpy as py import pandas as pd 创建一个表: df = pd.DataFrame({"id": ...

  3. macbook不能进系统 备份数据_不基于备份和表,生产系统数据误删就能完全恢复?!...

    作者介绍 刘宝珍,架构师,目前就职于大型资产管理公司的科技子公司,拥有多年的大型私有云的规划和设计工作经验,熟悉软件的开发流程,目前醉心于研究基于DDD和敏捷的软件的开发模式,对分布式架构有深入的理解 ...

  4. navicat 表合并查询_MySQL数据表合并去重的简单实现方法

    场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...

  5. Python自动化小技巧10——excel文件批量多sheet表合并

    本次案例背景是博主之前实习时遇到的问题,就是有很多个excel表: 每个工作簿里面又有很多sheet子表: 想要把这些子表合并在一起,多个excel工作簿也要合并到一起,手工肯定慢,这种重复性的劳动交 ...

  6. python删除两个excel表中的相同元素_Python数据处理--删除重复项、数值替换和表合并...

    导入需要的包:numpy.pandas import numpy as py import pandas as pd 创建一个表:df = pd.DataFrame({"id":[ ...

  7. tkinter使用MySQL存数据_我无法从tkinter表单向mysql插入数据

    我能很好地连接到我的数据库,总线,不知怎么的,我把它的书写部分搞砸了. 这是我的代码: from tkinter import * from tkinter import messagebox imp ...

  8. DataWhale 大数据处理技术组队学习task3

    四.分布式数据库HBase 1. 产生背景 1.1 Hadoop的局限性 优点:存储结构化.半结构甚至非结构化的数据,是传统数据库的补充,是海量数据存储的最佳方法. 缺陷: 只能进行批处理,并且只能以 ...

  9. clickhouse大数据分析技术与实战_比Hive快500倍!大数据实时分析领域的黑马

    戳蓝字"小强的进阶之路"关注我们哦! 大数据实时分析领域的黑马是ClickHouse一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). clickhouse背景 俄罗斯 ...

最新文章

  1. 线程关键字、锁、同步集合笔记
  2. ibatis查询SQL语句返回一个对象,此对象包含一个List属性
  3. 2017辽宁冬令营-4.蚂蚁
  4. DataSet写入Excel
  5. 成功解决AttributeError: module 'tensorflow.python.ops.nn' has no attribute '_seq2seq'
  6. 成功解决explicit device specific/device:GPU:0' because no supported kernel for GPU devices is available.
  7. spring4.0:@Configuration的使用
  8. C#利用NOPI处理Excel的代码
  9. 【资源】100页机器学习入门完整版,初学者必备!
  10. android服务的应用,Android学习指南之十四:Service详解及应用实例
  11. linux 显示套接字统计信息,Linux 命令 - ss: 查看套接字统计信息
  12. 纯后处理的volumetric light
  13. html调用阅读模式,easyread.js—给网站开启阅读模式html教程
  14. uniapp的选择收货地址
  15. Angular.js(出库列表页)
  16. 一文了解DataStore(Preferences)
  17. 优动漫PAINT实用教程——矢量擦除
  18. 电影《功夫熊猫1》中的管理知识
  19. 服务器硬盘热插拔检测不到,用过这么多年才知道, 原来有的设备是真的不能热插拔的!...
  20. python随机排列图片_更改图片中的随机像素,python

热门文章

  1. 网络层中的数据平面——网络核心中的转发!
  2. 南京印象之出租车司机
  3. Unity 制作两个按钮分别控制两个声音组件
  4. Linux虚拟机不显示IP地址解决方法(亲测有效)
  5. 在苹果MacOS Majave10.14.6系统中安装SRIM 2008软件
  6. oracle常用errcode
  7. 视频教程-软考系统集成项目管理工程师视频教程(下)-软考
  8. JQuery之常用插件
  9. 举个栗子~Tableau 技巧(211):学做指针环形图
  10. 举个栗子!Tableau 技巧(116):做一个有趣的锥状柱形图