精华内容
下载资源
问答
  • python数据清洗
    万次阅读
    2022-03-11 11:01:57

    数据清洗-时间格式化

    1.字符串转时间

    from datetime import datetime
    t = '2020年11月11日15:04:41'
    time = datetime.strptime(t,'%Y年%m月%d日%H:%M:%S')
    print(time) # 结果:2020-11-11 15:04:41
    
    t1 = '2020-11-11 15:04:41'
    time1 = datetime.strptime(t1,'%Y-%m-%d %H:%M:%S')
    print(time1) #结果:2020-11-11 15:04:41
    
    t2 = '2020年11月11日'
    time2 = datetime.strptime(t2,'%Y年%m月%d日')
    print(t2) #结果 2020年11月11日
    
    • 字符串转时间:采用 **datetime.strptime(str,t)**方法
      • str:需要转换的字符串
      • t:转换格式:见下表(这个方法,必须保证t的格式要与str一模一样

    2.时间转字符串

    from datetime import datetime
    
    t2 = '2020年11月11日'
    time2 = datetime.strptime(t2,'%Y年%m月%d日')
    print(datetime.strftime(time2,'%Y-%m-%d %H:%M:%S'))# 结果:2020-11-11 00:00:00
    

    时间转字符串:采用 **datetime.strftime(time,t)**方法

    • time:需要转换的时间
    • t:转换格式:见下表(这个方法,当时间的精度没有t高的时候,用0代替

    3.时间戳相互转换

    import time
    
    # 将格式字符串转换为时间戳
    a = "2020-11-11 15:04:41"
    s = time.mktime(time.strptime(a,"%Y-%m-%d %H:%M:%S"))
    print(s)
    t = time.localtime(s)
    print(time.strftime('%Y-%m-%d %H:%M:%S',t))
    # 结果
    # 1605078281.0
    # 2020-11-11 15:04:41
    
    • 时间转时间戳:time.mktime()
    • 时间戳转时间:time.localtime()

    4.python中时间日期格式化符号:

    • %y 两位数的年份表示(00-99)
    • %Y 四位数的年份表示(000-9999)
    • %m 月份(01-12)
    • %d 月内中的一天(0-31)
    • %H 24小时制小时数(0-23)
    • %I 12小时制小时数(01-12)
    • %M 分钟数(00=59)
    • %S 秒(00-59)
    • %a 本地简化星期名称
    • %A 本地完整星期名称
    • %b 本地简化的月份名称
    • %B 本地完整的月份名称
    • %c 本地相应的日期表示和时间表示
    • %j 年内的一天(001-366)
    • %p 本地A.M.或P.M.的等价符
    • %U 一年中的星期数(00-53)星期天为星期的开始
    • %w 星期(0-6),星期天为星期的开始
    • %W 一年中的星期数(00-53)星期一为星期的开始
    • %x 本地相应的日期表示
    • %X 本地相应的时间表示
    • %Z 当前时区的名称
    • %% %号本身
    更多相关内容
  • 这是一份python数据清洗思维导图,参加数学建模竞赛时朋友共享给我的,共享给大家,一起学习
  • python数据清洗

    2018-07-22 19:22:13
    本资源部分参考《干净的数据 ——数据清洗入门与实践》,但更多的都是个人撰写。
  • Python数据清洗实践

    2021-02-24 08:01:05
    数据清洗是数据科学中很少提及的一点,因为它没有训练神经网络或图像识别那么重要,但是数据清洗却扮演着非常重要的角色。没有它,机器学习预测模型将不及我们预期那样有效和精准。下面我将讨论这些不一致的数据:列
  • 数据清洗一直是数据分析中极为重要的一个环节。 数据合并 在pandas中可以通过merge对数据进行合并操作。 import numpy as np import pandas as pd data1 = pd.DataFrame({'level':['a','b','c','d'], 'numeber':[1...
  • 数据清洗之文件操作 读取:csv文件 实用read_csv方法读写,结果为dataframe格式 读写csv文件,文件名称用英文 参数较多,可以自行控制,很多使用默认参数 读csv,常用编码utf-8,gbk,gbk2312,gb18030 实用to_csv...
  • python数据清洗Pandas指导手册,有详细的方法使用事例,可以通过IPython Notebook打开
  • python数据清洗入门教程(完整版)

    千次阅读 2022-06-12 01:55:46
    提取码:23uk数据清洗意义数据清洗常用工具数据库建立连接参数 conn =create_engine(‘mysql+pymysql://user:passward@IP:3306/test01’) root: 用户名 passward: 密码 IP : 服务器IP,本地电脑用localhost 3306: ...

    数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步。数据清洗的过程决定了数据分析的准确性。随着大数据的越来越普及,数据清洗是必备的技能之一,本教程将较为完整地介绍利用python进行数据清洗的整个过程。即适合零基础的小白也可作为数据清洗大佬的复习指南。文章较长,干货较多,建议大家先收藏后观看,希望对大家有所帮助。

    为了方便阅读和复习,本教程中的代码均采用图片形式,源代码和所需要的数据在下面的链接里
    链接:https://pan.baidu.com/s/1-3PMsSs5XKjhszVXQIABpw
    提取码:23uk

    课程大纲

    1.数据清洗之常用工具

    数据清洗意义

    1. 现实生活中,数据并非完美的, 需要进行清洗才能进行后面的数据分析
    2. 数据清洗是整个数据分析项目最消耗时间的一步
    3. 数据的质量最终决定了数据分析的准确性
    4. 数据清洗是唯一可以提高数据质量的方法,使得数据分析的结果也变得更加可靠

    数据清洗常用工具

    1. 目前在Python中, numpy和pandas是最主流的工具
    2. Numpy中的向量化运算使得数据处理变得高效
    3. Pandas提供了大量数据清洗的高效方法
    4. 在Python中,尽可能多的使用numpy和pandas中的函数,提高数据清洗的效率

    1.1 Numpy

    Numpy常用数据结构

    1. Numpy中常用的数据结构是ndarray格式
    2. 使用array函数创建,语法格式为array(列表或元组)
    3. 可以使用其他函数例如arange、linspace、zeros等创建

    在这里插入图片描述

    Numpy常用方法

    1. ndim: 返回int,表示ndarray的维度
    2. shape:返回尺寸,几行几列
    3. size:返回数组元素的个数
    4. dtype:返回数组中元素的类型
    5. 运算:直接可以在每个元素加减乘除

    在这里插入图片描述

    数组访问方法

    在这里插入图片描述

    Numpy常用数据清洗函数

    1. 排序函数
      sort函数: 从小到大进行排序
      argsort函数: 返回的是数据中从小到大的索引值
    2. 数据的搜索
      np.where: 可以自定义返回满足条件的情况
      np.extract: 返回满足条件的元素值

    在这里插入图片描述

    1.2 Pandas

    Pandas常用数据结构series和方法

    1. 通过pandas.Series来创建Series数据结构。
    2. pandas.Series(data,index,dtype,name)。
    3. 上述参数中,data可以为列表,array或者dict。
    4. 上述参数中, index表示索引,必须与数据同长度,name代表对象的名称

    在这里插入图片描述

    Pandas常用数据结构dataframe和方法

    1. 通过pandas.DataFrame来创建DataFrame数据结构。
    2. pandas. DataFrame(data,index,dtype,columns)。
    3. 上述参数中,data可以为列表,array或者dict。
    4. 上述参数中, index表示行索引, columns代表列名或者列标签

    在这里插入图片描述

    series和dataframe常用方法

    1. values 返回对象所有元素的值
    2. index 返回行索引
    3. dtypes 返回索引
    4. shape 返回对象数据形状
    5. ndim 返回对象的维度
    6. size 返回对象的个数
    7. columns 返回列标签(只针对dataframe数据结构)

    2.数据清洗之文件操作

    1. Pandas读写CSV文件和相关参数解释
    2. Pandas读写excel文件和相关参数解释
    3. Pandas与mysql的交互

    2.1 csv文件读写

    1. pandas内置了10多种数据源读取函数,常见的就是CSV和EXCEL
    2. 使用read_csv方法读取,结果为dataframe格式
    3. 在读取csv文件时,文件名称尽量是英文
    4. 参数较多,可以自行控制,但很多时候用默认参数
    5. 读取csv时,注意编码,常用编码为utf-8、gbk 、gbk2312和gb18030等
    6. 使用to_csv方法快速保存

    在这里插入图片描述

    2.2 excel文件读写

    1. 使用read_excel读取,读取后的结果为dataframe格式
    2. 读取excel文件和csv文件参数大致一样, 但要考虑工作sheet页
    3. 参数较多,可以自行控制,但很多时候用默认参数
    4. 读取excel时,注意编码,常用编码为utf-8、gbk 、gbk2312和gb18030等
    5. 使用to_excel快速保存为xlsx格式

    在这里插入图片描述

    2.3 数据库文件读写

    1. 使用sqlalchemy建立连接
    2. 需要知道数据库的相关参数,如数据库IP地址、用户名和密码等
    3. 通过pandas中read_sql 函数读入, 读取完以后是dataframe格式
    4. 通过dataframe的to_sql方法保存

    数据库建立连接参数
    conn =create_engine(‘mysql+pymysql://user:passward@IP:3306/test01’)
    root: 用户名
    passward: 密码
    IP : 服务器IP,本地电脑用localhost
    3306: 端口号
    test01 : 数据库名称

    df.to_sql(name, con=engine, if_exists=‘replace/append/fail’,index=False)
    name是表名
    con是连接
    if_exists:表如果存在怎么处理。三个选项 append代表追加, replace代表删除原表,建立新表,fail代表什么都不干
    index=False:不插入索引index

    在这里插入图片描述

    3. 数据清洗之数据表处理

    3.1 数据常用筛选方法

    1. 在数据中,选择需要的行或者列
    2. 基础索引方式,就是直接引用
    3. ioc[行索引名称或者条件,列索引名称或者标签]
    4. iloc[行索引位置,列索引位置]
    5. 注意, 区分loc和iloc

    在这里插入图片描述
    在这里插入图片描述

    3.2 数据增加和删除

    1. 在数据中,直接添加列
    2. 使用df.insert方法在数据中添加一列
    3. 掌握drop(labels,axis,inplace=True) 的用法
    4. labels表示删除的数据, axis表示作用轴,inplace=True表示是否对原数据生效
    5. axis=0按行操作, axis=1按列操作
    6. 使用del函数直接删除其中一列

    参数解释
    在这里插入图片描述在这里插入图片描述

    3.3 数据修改和查找

    1. 在数据中, 可以使用rename修改列名称或者行索引名称
    2. 使用loc方法修改数据
    3. 使用loc方法查找符合条件的数据
    4. 条件与条件之间用&或者|连接,分别代表‘且’和‘或’
    5. 使用between和isin选择满足条件的行

    在这里插入图片描述

    在这里插入图片描述

    3.4 数据整理

    定义:在数据清洗过程中,很多时候需要将不用的数据整理在一起,方便后续的分析,这个过程也叫数据合并

    合并方法:常见的合并方法有堆叠和按主键进行合并,堆叠又分为横向堆叠和纵向堆叠,按主键合并类似于sql里面的关联操作

    1. 横向堆叠将两张表或多张表在X轴方向,即横向拼接在一起
    2. 纵向堆叠将两张表或多张表在Y轴方向,即纵向拼接在一起
    3. 注意使用concat时,axis =1用于横向,0代表纵向
    4. 注意join取inner或者outer时,分别代表交集和并集

    关联操作
    在这里插入图片描述纵向合并

    在这里插入图片描述
    在这里插入图片描述

    3.5层次化索引

    定义:在一个轴上拥有两个或者两个以上的索引
    使用loc语句进行访问
    loc里面接受tuple,如loc[(a,b),:]

    在这里插入图片描述
    在这里插入图片描述

    4. 数据清洗之数据转换

    4.1 日期格式数据处理

    1. Pandas中使用to_datetime()方法将文本格式转换为日期格式
    2. dataframe数据类型如果为datetime64,可以使用dt方法取出年月日等
    3. 对于时间差数据,可以使用timedelta函数将其转换为指定时间单位的数值
    4. 时间差数据,可以使用dt方法访问其常用属性

    在这里插入图片描述

    4.2 字符串数据处理

    1. Pandas中提供了字符串的函数,但只能对字符型变量进行使用
    2. 通过str方法访问相关属性
    3. 可以使用字符串的相关方法进行数据处理
      在这里插入图片描述
      在这里插入图片描述

    4.3 高阶函数数据处理

    1. 在dataframe中使用apply方法,调用自定义函数对数据进行处理
    2. 函数apply, axis=0表示对行进行操作,axis=1表示对列进行操作
    3. 可以使用astype函数对数据进行转换
    4. 可以使用map函数进行数据转换

    在这里插入图片描述

    5. 数据清洗之数据统计

    5.1 数据分组运算

    分组计算根据某个或者某几个字段对数据集进行分组,然后运用特定的函数,得到结果
    在这里插入图片描述

    1. 使用groupby方法进行分组计算,得到分组对象GroupBy
    2. 语法为df.groupby(by=)
    3. 分组对象GroupBy可以运用描述性统计方法, 如count、mean 、median 、max和min等

    在这里插入图片描述

    5.2 聚合函数使用

    1. 对分组对象使用agg聚合函数
    2. Groupby.agg(func)
    3. 针对不同的变量使用不同的统计方法
      在这里插入图片描述

    5.3 分组对象与apply函数

    1. 函数apply即可用于分组对象,也可以作用于dataframe数据
    2. Groupby.apply(func)
    3. 需要注意axis=0和axis=1的区别

    在这里插入图片描述

    5.4 透视图与交叉表

    在数据分析中,数据透视表是常见的工具之一,需要根据行或列对数据进行各个维度数据的汇总,在pandas中,提供了相关函数解决此类问题,交叉表更多用于频数的分析。

    pivot_table( data, index, columns,values, aggfunc, fill_value,margins, margins_name=)

    Index :      行分组键
    columns:     列分组键
    values:      分组的字段,只能为数值型变量
    aggfunc:     聚合函数
    margins:     是否需要总计
    

    交叉表用于计算分组频率
    pd.crosstab(index,columns,normalize)

    Index: 行索引
    Columns: 列索引
    Normalize:  数据对数据进行标准化,index表示行,column表示列
    

    在这里插入图片描述

    6. 数据清洗之数据预处理

    6.1 重复值处理

    1. 数据清洗一般先从重复值和缺失值开始处理
    2. 重复值一般采取删除法来处理
    3. 但有些重复值不能删除,例如订单明细数据或交易明细数据等
      在这里插入图片描述

    6.2 缺失值处理

    1. 缺失值首先需要根据实际情况定义
    2. 可以采取直接删除法
    3. 有时候需要使用替换法或者插值法
    4. 常用的替换法有均值替换、前向、后向替换和常数替换
      在这里插入图片描述

    6.3 异常值处理

    1. 指那些偏离正常范围的值,不是错误值
    2. 异常值出现频率较低,但又会对实际项目分析造成偏差
    3. 异常值一般用过箱线图法(分位差法)或者分布图(标准差法)来判断
    4. 异常值往往采取盖帽法或者数据离散化

    在这里插入图片描述
    在这里插入图片描述

    6.4 数据离散化处理

    1. 数据离散化就是分箱
    2. 一般常用分箱方法是等频分箱或者等宽分箱
    3. 一般使用pd.cut或者pd.qcut函数

    pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

    x,类array对象,且必须为一维,待切割的原形式
    bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,
    	但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。
    	如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。
    right,布尔值。是否是左开右闭区间,right=True,左开右闭,right=False,左闭右开
    labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
    retbins,布尔值。是否返回面元
    precision,整数。返回面元的小数点几位
    include_lowest,布尔值。第一个区间的左端点是否包含
    

    pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates=’raise’)

    x 
    q,整数或分位数组成的数组。
    q, 整数 或分位数数组 整数比如 4 代表 按照4分位数 进行切割 
    labels, 用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
    

    在这里插入图片描述

    7. 总结与梳理

    7.1 数据清洗步骤

    1. 数据获取,使用read_csv或者read_excel
    2. 数据探索,使用shape,describe或者info函数
    3. 行列操作,使用loc或者iloc函数
    4. 数据整合,对不同数据源进行整理
    5. 数据类型转换,对不同字段数据类型进行转换
    6. 分组汇总,对数据进行各个维度的计算
    7. 处理重复值、缺失值和异常值以及数据离散化

    7.2 函数大全

    1. merge,concat函数常常用于数据整合
    2. pd.to_datetime常常用于日期格式转换
    3. str函数用于字符串操作
    4. 函数astype用于数据类型转换
    5. 函数apply和map用于更加高级的数据处理
    6. Groupby用于创建分组对象
    7. 透视表函数pd.pivot_table和交叉表pd.crosstab
    8. 分组对象和agg结合使用,统计需要的信息

    7.3 数据清洗之总结

    数据清洗实质上是将实际业务问题中,脏数据清洗干净,转换为’干净的数据’, 所谓的脏
    ,指数据可能存在以下几种问题(主要问题):

    1. 数据缺失 (Incomplete) 是属性值为空的情况。如 Occupancy = “ ”
    2. 数据噪声 (Noisy)是数据值不合常理的情况。如 Salary = “-100”
    3. 数据不一致 (Inconsistent)是数据前后存在矛盾的情况。如 Age = “042” 或者
      Birthday = “01/09/1985”
    4. 数据冗余 (Redundant)是数据量或者属性数目超出数据分析需要的情况
    5. 离群点/异常值 (Outliers)是偏离大部分值的数据
    6. 数据重复是在数据集中出现多次的数据

    本教程到这终于结束了,希望对大家有所帮助

    展开全文
  • python数据清洗学习记录–文件读写 目录python数据清洗学习记录–文件读写csv文件读写excel文件读写数据库文件的读写创建连接,连接MySQL数据保存 前期准备: #导入os模块 import os #获得当前路径地址 os.getcwd() ...
  • 博文中python数据清洗所用到的源数据,包括在线杂货店订单数据、摩托车的销售情况数据、关于淘宝母婴产品的用户消费行为的数据集
  • 前面我们用pandas做了一些基本的操作,接下来进一步了解数据的操作,数据清洗一直是数据分析中极为重要的一个环节。在pandas中可以通过merge对数据进行合并操作。结果为:结果为: 结果为:可以看到data1和data2中...
  • 常用的数据清洗方法 本文首发于微信公众号《Python希望社》,欢迎关注,完整详细的原文链接请点击这里 在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在确实、数据是否具有...

    常用的数据清洗方法

    本文首发于微信公众号《Python希望社》,欢迎关注,完整详细的原文链接请点击这里

    在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在确实、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理。

    本文大纲如下: 全文共5746字。

    认真阅读本文你将掌握常用的数据清洗方法和策略

    常用的数据清洗方法
    重复观测处理
    检测
    处理
    缺失值处理
    数据过滤/删除法dropna
    数据填充 / 替换法fillna
    插值法
    异常值处理
    异常值检测
    异常值处理及其前后对比

    一、重复观测处理

    重复观测是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在进行数据分析和建模之前都需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。

    1.1处理方法

    (1)检测重复观测

    pandas中使用duplicated方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个bool值;

    (2)处理重复观测

    使用drop_duplicated方法移除重复值。

    1.2 案例展示(电商类APP相关数据)

    (1)待清洗的原始数据


    原始数据

    可以看出,**浅绿色 ** 突出显示数据行为重复观测示例。为此进行如下处理:

    (2)重复观测处理示例

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BSli6Jji-1615030308261)(F:\Typroa\微信公众号\1-向希望\数据清洗\2.gif)]

    (3)源码

    import pandas as pd
    # load data
    data = pd.read_excel('1.xlsx')
    data
    #----------------------------------------------------
    # 判断是否存在重复观测
    print('是否存在重复观测:',any(data.duplicated()))
    #----------------------------------------------------
    # 处理重复观测
    data.drop_duplicates(inplace=True) # inplace=True时直接删除data中重复的数据
    data
    #----------------------------------------------------
    ## 将处理后的数据 重新保存
    f = pd.ExcelWriter('data_processed.xlsx')   # 创建文件对象
    data.to_excel(f)                            # 将处理后的data写入新建的excel中
    f.save()                                    # 保存文件
    

    二、缺失值处理

    数据缺失在大部分数据应用中都很常见,Pandas使用浮点值NaN表示浮点或非浮点数组中的缺失数据,Python内置的None值也会被当作缺失值处理。

    2.1 检测数据缺失

    Pandas使用方法isnull检测是否为缺失值,检测对象的每个元素返回一个bool值。

    结果演示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYeE7G0Y-1615030308266)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\22.gif)]

    从上面的结果可以看出:data 数据中的第2个、第四个都被视为缺失值。(源码如下)

    # 导入包库
    import numpy as np
    import pandas as pd
    # 生成原始测试数据
    data = pd.Series([10.0, None, 20,np.NaN, 30])
    data
    #----------------------------------------------------
    print(data.isnull())
    #----------------------------------------------------
    print("是否存在缺失值:",any(data.isnull()))
    

    2.2 处理数据缺失

    对于缺失值一般可以采用三种方法,分别是过滤法、填充法和插值法。在这里我们分别给出每种方法的内容和案例展示(附源码)

    (1)数据过滤 / 删除法 (dropna)

    是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测;或者当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量。

    数据过滤dropna方法的语法格式如下

    dropna(axis = 0, how = 'any', thresh = None)
    ## -------- 参数注释 -----------
    # (1)axis = 0 表示删除行(记录);axis = 1 表示删除列(变量)
    # (2)how 参数可选值为 any 或 all, all 表示删除全有NaN的行
    # (3)thresh 为整数类型,表示删除的条件,如thresh = 3,表示一行中至少有3个非NaN值时,才将其保留。
    

    要查看关于 dropna方法的帮助,可以使用下面命令:(其他命令同理)

    import pandas
    help(pd.DataFrame.dropna)
    
    案例展示:

    原始数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XhggXIW-1615030308270)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('3.xlsx',usecols = range(1,4))   # 提取 第2列到第4列的数据
    a
    #-------------------------------------
    b1 = a.dropna()    # 删除所有的缺失值
    print(b1)
    #-------------------------------------
    b2 = a.dropna(axis = 1, thresh = 9)  # 删除有效数据个数小于 9 的列
    print(b2)
    #-------------------------------------
    b3 = a.drop('用户B', axis = 1)   # 删除用户B的数据
    print(b3)
    
    

    (2)数据填充 / 替换法 (fillna

    是指用某种常数直接替换那些缺失值,例如,对于连续变量而言,可以使用均值或中位数替换;对于离散变量,可以使用众数替换。

    当数据中出现缺失值时,还可以用其他的数值进行填充,常用的方法是 fillna, 其基本语法格式为:

    fillna(value = None, method = None, axis = None, inplace = False)
    # 其中value值除基本类型外,还可以使用字典,这样可以实现对不同的列填充不同的值。method表示采用的填补数据的方法,默认是None。
    

    下面通过示例说明fillna 的用法。

    案例展示:

    原始数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmpxEsaQ-1615030308274)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\2222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('4.xlsx')
    a
    #----------------------------
    b1 = a.fillna(0)  							# 用 0 填补所有的缺失值
    b2 = a.fillna(method = 'ffill') 			# 用前一行的值填补缺失值
    b3 = a.fillna(method = 'bfill') 			# 用后一行的值填补,最后一行缺失值不处理	
    b4 = a.fillna(value = {'gender':a.gender.mode()[0],'age':a.age.mean(),'income':a.income.median()})
    ## 性别使用众数替换 年龄使用均值替换 收入使用中位数替换
    #----------------------------
    print(b1,'\n----------------------------\n',b2,'\n----------------------------\n',b3,'\n----------------------------\n',b4)
    

    (3)插值法

    插值法是指根据其他非缺失的变量或观测来预测缺失值,常见的插值法有线性插值法、K近邻插值法、Lagrange插值法等。

    当出现缺失值时,也可以使用插值法对缺失值进行插补,插值的数学原理在 其中的插值方法可以使用:‘linear’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’,‘cubic’,‘spline’,‘barycentric’,‘polynomial’.

    案例演示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1uEp6nC-1615030308277)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\22222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('4.xlsx')
    a
    # ----------------------------------
    import numpy as np
    b = a.fillna(value = {'gender':a.gender.mode()[0],                              # 性别使用众数替换
                          'age':a.age.interpolate(method = 'polynomial',order = 2), # 年龄使用 二次多项式插值 替换
                          'income':a.income.interpolate()})                         # 收入使用线性插值替换 
    

    三、异常值处理

    异常值(Outlier)是指哪些远离正常值的预测,即“不合群”观测。异常值的出现会对模型的创建和预测产生严重的后果。当然异常值的出现也不一定都是坏事,有些情况下,通过寻找异常值就能够给业务带来良好的发展,如【销毁“钓鱼网站”,关闭“薅羊毛”用户的权限等】

    对于异常值的检测,一般采用两种方法,一种是标准差法,另一种是箱线图判别法。标准差法的判别公式是: outlier > x ^ + n σ \text{outlier}>\hat{x}+n\sigma outlier>x^+nσ 或者 outlier < x ^ − n σ \text{outlier}<\hat{x}-n\sigma outlier<x^nσ , 其中 outlier < x ^ − n σ \text{outlier}< \hat x -n\sigma outlier<x^nσ , 其中 x ^ \hat{x} x^ 是均值, σ \sigma σ是样本标准差。当 n = 2 n=2 n=2 时, 满足条件的观测就是异常值;当 n = 3 n=3 n=3 时,满足条件的观测即是极端异常值。

    箱线图的判别公式是: outlier > Q 3 + n IQR \text{outlier}>Q_3+n\text{IQR} outlier>Q3+nIQR outlier < Q 1 − n IQR \text{outlier}<Q_1-n\text{IQR} outlier<Q1nIQR , 其中 Q 1 Q_1 Q1 为下四分位数(25%), Q 3 Q_3 Q3 为上四分位数(75%), IQR \text{IQR} IQR 为上四分位数与下四分位数的差。当$ n=1.5 时 , 满 足 条 件 的 观 测 为 异 常 值 , 当 时,满足条件的观测为异常值,当 n=3$ 时,满足条件的观测为极端异常值。

    这两种方法的选择标准如下,如果数据近似服从正态分布,因为数据的分布相对比较对称,优先选择标准差法。否则优先选择箱线图法,因为分位数并不会收到极端值的影响。当数据存在异常时,若异常观测的比例不要打,一般可以使用删除法将异常值删除;也可以使用替换法,可以考虑使用低于判别上限的最大值替换上端异常值、高于判别下限的最小值替换下端异常值,或使用均值或中位数替换等。

    3.1 案例展示:

    (1)异常值检测

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6diSHbF-1615030308278)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\222222.gif)]

    原始数据和异常值检验结果


    原始数据

    直方图与核密度图

    (2)异常值的处理及其前后对比

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFOaax3T-1615030308279)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\2222222.gif)]

    countmeanstdmin25%50%75%max
    替换前28948.613539.4741015.63968.9190.2
    替换后28948.066037.9189015.63968.9141.7

    源码如下:

    # =============================================
    # 异常值检测
    # =============================================
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    a = pd.read_csv('ISSN_Y_tot.csv')
    a
    #---------------------------------------------
    plt.plot(a.counts)
    plt.show()
    #---------------------------------------------
    mu = a.counts.mean()  # 计算黑子 个数年平均值
    s = a.counts.std()    # 计算黑子个数标准差
    print('标准差法异常值上限检测:',any(a.counts>mu+2*s))  # 输出: True
    print('标准差法异常值下限检测:',any(a.counts<mu-2*s))  # 输出: False
    #---------------------------------------------
    Q1 = a.counts.quantile(0.25) # 计算下四分位数
    Q3 = a.counts.quantile(0.75) # 计算上四分位数
    IQR = Q3 - Q1
    print("箱线图法异常值上限检测:",any(a.counts> Q3 + 1.5*IQR))  # 输出:  True
    print("箱线图法异常值下限检测:",any(a.counts< Q1 - 1.5*IQR))  # 输出:  False
    #---------------------------------------------
    plt.style.use('ggplot')     # 设置绘图风格
    a.counts.plot(kind = 'hist', bins = 30 , density = True)    # 绘制直方图
    a.counts.plot(kind = 'kde')                                 # 绘制核密度曲线
    plt.show()
    # =============================================
    #  异常值处理
    # =============================================
    print('异常值替换前的数据统计特征',a.counts.describe())
    #---------------------------------------------
    UB = Q3 + 1.5 * IQR;
    st = a.counts[a.counts < UB].max()
    print('判别异常值的上限临界值为:',UB)
    print('用以替换异常值的数据为:',st)
    #---------------------------------------------
    a.loc[a.counts>UB,'counts'] = st      # 替换超过判别上限异常值
    print('异常值替换后的数据特征\n',a.counts.describe())
    
    参考文献

    司首奎,孙玺菁.《Python数学实验与建模》. 北京:科学出版社,2020

    推文中所涉及到的所有 数据集和全部源代码 均可通过在后台回复关键字”数据清洗“获得。

    展开全文
  • 主要介绍了python数据清洗之字符串处理的相关资料,需要的朋友可以参考下
  • 文章目录数据清洗步骤函数大全数据清洗的内容总结 数据清洗步骤 数据获取,使用read_csv或者read_excel 数据探索,使用shape,describe或者info函数 行列操作,使用loc或者iloc函数 数据整合,对不同的数据源进行...
  • 第一章:数据清洗常用工具1.numpy常用数据结构常用清洗工具:numpy常用数据结构:Numpy常用方法数组访问方法练习(jupyter)代码下面是结果2.Numpy常用数据清洗函数数据的排序数据的搜索练习(jupyter)代码下面是...
  • 对csv文件进行读取并按照一定规则进行数据清洗
  • 包括了数据清洗全流程的实例:excel导入,定义数据框,按要求删除某一列下为一个指定值的数据记录,遍历数据集,分组分类变量用指定的数值型数值替换,按某一列的值拆分数据集,使用聚类分析将数据集分为两类,标记...
  • 数据预处理的主要内容包括:数据清洗;数据集成;数据转换;数据规约;但是在这一篇里,我们只讲数据清洗,其他部分会慢慢整理。数据清洗主要是删除原始数据中的无关数据,重复数据,平滑噪声数据,筛选掉与建模目的...
  • 本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。
  • python数据清洗---实战案例(清洗csv文件)

    万次阅读 多人点赞 2021-04-12 22:31:20
    下面开始对数据进行清洗 导入pandas模块,打开数据文件 import pandas as pd df = pd.read_csv("ResourceFile.csv") 我们输出指定列名 print(df.名称) 但此时会报错,因为列名"名称"中含有空格,我们输出列名看...

    我也是最近才开始这方面的学习,这篇就当作学习的笔记,记录一下学习的过程


    所要处理的数据
    在这里插入图片描述


    数据中主要存在的问题包括:

    1.列名中存在空格
    2.存在重复数据
    3.存在缺失数据



    导入pandas模块,打开数据文件

    import pandas as pd
    
    df = pd.read_csv("ResourceFile.csv")
    

    当我们想要输出指定列名的时候,却报错了

    print(df.名称)
    

    在这里插入图片描述

    但我们的列名中的确是有"名称"这一列的,为什么会显示没有"名称"这一列呢?我们输出列名看一下

    方法一:

    print(df.describe())
    

    在这里插入图片描述


    方法二:

    # 只输出列名
    print(df.columns.values)
    

    在这里插入图片描述

    我们可以看到,列名"名称"是带有空格的,那如果我们这样写

    print(df['  名称 '])
    

    在这里插入图片描述
    就可以输出这一列的数据了


    所以我们现在要解决的问题就是删除列名中的空格


    使用比较简单的一种方法:列表推导式去空格

    ClName = df.columns.values
    # 使用列表推导式
    df.columns = [x.strip() for x in ClName]
    print(df.columns.values)
    

    在这里插入图片描述

    成功删除空格



    接下来要解决的问题就是处理文件中的重复数据


    我们先来查看下一共有多少行数据,三种方法

    方法一:

    # 结果  (行数,列数)
    print(df.shape)
    

    在这里插入图片描述

    方法二:

    print(df.info())
    

    在这里插入图片描述

    方法三:

    # 查看索引信息
    print(df.index)
    

    在这里插入图片描述

    我们可以看到,通过三种方法得到的结果是一共有2794行数据


    那我们现在来查看重复的数据


    这里说的重复是指两行数据完全相同,如果只有部分数据相同,那不是重复

    # 判断重复值 返回值类型为 Boolean
    print(df.duplicated())
    

    false表示没有重复,true表示有重复,默认从上到下比较,若上一行的数据和下一行的数据重复,则下一行标记为true

    在这里插入图片描述


    如果这样不太直观,我们可以直接查看有多少行重复的数据

    # 返回重复的行数
    print(df.duplicated().sum())
    

    在这里插入图片描述


    还可以查看重复的数据行

    # 布尔索引 显示重复数据
    print(df[df.duplicated()])
    

    在这里插入图片描述

    接下来就要删除这些重复的数据,两种方法

    方法一:

    这种方法不会对数据文件直接进行修改,而是生成一个临时表

    # 删除重复值 不改变源数据 临时生成的表
    print(df.drop_duplicates())
    

    输出的临时表是删除重复数据之后的表,我们可以看到,现在的数据只有614行
    在这里插入图片描述

    而此时如果再查看源数据文件的信息,可以看到,源数据文件中的数据并没有减少

    print(df.info())
    

    在这里插入图片描述


    方法二:

    这种方法会直接对源数据文件进行修改

    # 删除重复值 修改源数据
    df.drop_duplicates(inplace=True)
    

    查看源数据文件信息

    print(df.info())
    

    在这里插入图片描述

    删除重复数据之后,我们要重置文件的索引

    # 重置索引
    df.index = range(df.shape[0])
    

    查看索引信息

    print(df.index)
    

    在这里插入图片描述


    接下来要处理的问题就是补全数据中的缺失值

    第一步,查看缺失值

    方法一:

    # 查看缺失值
    print(df.isnull())
    

    没有缺失值标记为false,有缺失值标记为true
    在这里插入图片描述

    方法二:

    # 查看没有缺失值
    print(df.notnull())
    

    没有缺失值标记为true,有缺失值标记为false
    在这里插入图片描述

    方法三:

    显示每一列中的缺失值数量

    # 显示每一列中的缺失值数量
    print(df.isnull().sum())
    

    在这里插入图片描述

    方法四:

    显示有缺失值的数据

    # 显示'特色'列中有缺失值的数据
    print(df[df.特色.isnull()])
    

    在这里插入图片描述

    第二步,填补缺失值

    # 提取'特色'列有缺失值的数据的'区域'列的值
    print(df.loc[df.特色.isnull(),'区域'])
    

    在这里插入图片描述

    填补"级别"列有缺失值的数据,填补内容为"无级别"

    # 填补"级别"列有缺失值的数据,填补内容为"无级别"
    df.loc[df.级别.isnull(),'级别'] = "无级别"
    

    查看’级别’列中缺失值的数量

    print(df.isnull().sum())
    

    在这里插入图片描述

    填补"特色"列有缺失值的数据,填补内容为"未知"

    # 填补"特色"列有缺失值的数据,填补内容为"未知"
    df.loc[df.特色.isnull(),'特色'] = "未知"
    

    查看’特色’列中缺失值的数量

    print(df.isnull().sum())
    

    在这里插入图片描述

    数据处理完成,保存文件

    df.to_csv("ResourceFile.csv")
    

    查看数据文件

    在这里插入图片描述

    全部代码

    import pandas as pd
    
    df = pd.read_csv("ResourceFile.csv")
    # 列名列表
    ClName = df.columns.values
    # 使用列表推导式
    # 列名去空格
    df.columns = [x.strip() for x in ClName]
    # 删除重复值 修改源数据
    df.drop_duplicates(inplace=True)
    # 重置索引
    df.index = range(df.shape[0])
    # 填补"级别"列有缺失值的数据,填补内容为"无级别"
    df.loc[df.级别.isnull(),'级别'] = "无级别"
    # 填补"特色"列有缺失值的数据,填补内容为"未知"
    df.loc[df.特色.isnull(),'特色'] = "未知"
    # 保存文件
    df.to_csv("ResourceFile.csv")
    
    
    展开全文
  • 无论是做机器学习还是做数据分析,都离不开获取数据后的第一步-数据清洗工作。据统计,数据清洗工作占据整个工作时间百分之50左右,有的甚至能达到百分之70。下面我将介绍我进行数据清洗得思路流程。 数据清洗整体...
  • 8个Python数据清洗代码,拿来即用

    千次阅读 2021-01-25 09:41:10
    不管你承不承认,数据清洗着实不是一件简单的任务,大多数情况下这项工作是十分耗时而乏味的,但它又是十分重要的。 如果你经历过数据清洗的过程,你就会明白我的意思。而这正是撰写这篇文章的目的——让读者更...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 文章目录一、XX 一、XX 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 数据分组运算2. 聚合函数使用3. 分组对象与apply函数4. 透视图与交叉表透视图交叉表用于计算分组频率 1.数据分组运算 使用groupby方法进行分组计算,得到分组对象GroupBy 语法为df.groupby(by=) 分组对象GroupBy...
  • python数据清洗测试题

    2019-12-28 20:42:29
    python数据清洗测试题 https://nbviewer.jupyter.org/github/zhanghongweip7m8/python-test/blob/master/python%20test%281%29.ipynb
  • pandas常用数据结构series和方法 通过pandas.series来创建series数据结构 pandas.series(data,index,dtype,name) data可以为列表,array或者dict index表示索引,必须与数据同长度,name代表对象的名称 建立...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,485
精华内容 20,594
关键字:

python数据清洗

友情链接: pkcs_1_i2osp.rar