Python数据分析与可视化教案3.5 数据的去空与去重_第1页
Python数据分析与可视化教案3.5 数据的去空与去重_第2页
Python数据分析与可视化教案3.5 数据的去空与去重_第3页
Python数据分析与可视化教案3.5 数据的去空与去重_第4页
Python数据分析与可视化教案3.5 数据的去空与去重_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课 题3. 5数据的去空与去重课 型讲练授课班级大数据授课时数2教学目标.能够按要求删除数据的空值。.能够按要求删除数据的重复值。教学重点.能够按要求删除数据的空值。.能够按要求删除数据的重复值。教学难点.能够按要求删除数据的空值。.能够按要求删除数据的重复值。去空和去重是数据预处理中的重要的一环,一般的数据往往需要进行去学情分析学情分析空和去重之后才能分析。数据去重时,可按照横向和纵向两种方向进行去重, 对于按纵向删除重复列的情况较少。在对数据进行预处理时,去空和去重是两个非常重要的方法。去空是指去除带有 空值的数据,去重是指去除重复数据。一、数据去空数据中的某个或某些特征的值是不完整的,这

2、些值称为缺失值,简单来说,缺失 值就是空值。.查看空值pandas提供了识别空值的方法isnull,这种方法在使用时返回的都是布尔值True 和False。再结合sum函数,可以检测出数据中每列的空值频数,统计各列空值频数 的一般用法为:_DataFrame.isnull().sum()例如代码如下:import numpy as npimport pandas as pdarr = np.arange( 1,17).reshape(4,4)data = pd.DataFrame(air,columns=,a,b,c,/d,)data.ilocl :3,1:4 = np.nan#表示将行索引编

3、号1到2,列索引编号1到3的数据都设为空值data.loc|0,3/b,l = np.nan#表示将行索引编号1和3,列索引b的数据都设为空值print(初始数据为据”,data)print(各列的空值频数为:rT,data.isnull().sum()【结果分析】利用np. nan可以生成DataFrame的空值。输出结果如图3-*所示。Run:3-5AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-5.py初始数据为:a b c d1方01NaN3.04.015NaNNaNNaN.29NaN

4、NaNNaNW3 13 NaN 15.0 16.0 各列的空值频数为:a 0b 4c 2d 2dtype: int64Process finished with exit code 0图3-*统计各列的空值频数例如结果2 .删除空值删除空值是删除带有空值的行或列,它属于利用减少样本量来换取信息完整度的 一种方法,是一种最简单的空值处理方法。pandas中提供了删除空值的dr叩na函数, 该函数可以删除带有空值的行或列。在实际操作中,删除带有空值的行的情况比拟多。 dropna函数的一般用法为:DataFrame.dropna(axis,how,subset=columns,inplace)其中

5、,各个参数的作用如下:axis接收。或1。axis=0表示删除空值所在的行,axis=l表示删除空值所在的列。默认为axis=O,即删除空值所在的行。how表示删除空值数据的方式。how二,any,表示只要有空值存在就删除。how-all 表示当且仅当全部为空值时就删除。默认为any。subset表示进行去空操作的列或行。按行删除时,subset表示columns列名,而 按列删除时,subset表示行索引index。inplace表示删除结果是否替换原表,默认为False。(1)删除空值所在行删除空值所在行的一般用法为:DataFrame.dropna(axis=0,how,subset,i

6、nplace)其中,axis=0为删除空值所在的行。subset表示按行删空时,需要考虑的列。例如代码如下:data_dropl = data.dropna(axis=0,how=any,subset=aVb7c)print(删除abc三列中任意一列中出现空值的行:n”,data_dropl)data_drop2 = data.dropna(axis=0,how=all,subset=a?b,c)print(删除abc三列中任全部都为空值的行:n”,data_drop2) 输出结果如图3-*所示。Run:3-5AC:UsersliliangAnaconda3python.exe C:/User

7、s/liliang/PycharmProjects/sjfx/3-5.py初始数据为: abed rp 0 1.0 2.0 3.0 4.0 1 NaN NaN NaN NaN ” . 2 9.0 NaN NaN NaNW 3 NaN NaN 15.0 16.0 删除abc三列中任意一列中出现空值的行: abed0 1.0 2.0 3.0 4.0删除abc三列中任全部都为空值的行: abed01.02.03.04.029.0NaNNaNNaN3NaNNaN15.016.0Process finished with exit code 0图3-*删除空值所在行例如结果【结果分析】axis=0表示按

8、行删空,subset表示列名,进一步分析abc三列。 在how=any的情况下,行索引为1、2、3三条数据都有任意一列出现空值,所以都 被删除了,只保存了索引号为0的行数据。在how=al I 的情况下,只有行索引为1的 一条数据三列都是空值,所以行索引为1的行数据被删除了,保存了索引号为0、2、 3的行数据。(2)删除空所在值列删除空值所在列的情况较少,因为通常情况下,不会因为一列中存在一个空值而 把整个一列都删除,这样丧失的信息量就会太大。_删除空值所在列的一般用法为:_DataFrame.dropna(axis= 1,how,subset,inplace)其中,axis=l为删除空值所在

9、的列。在按列删空时,how一般取就,默认也是 all,表示只有当一列中所有行或指定行都为空值才删除该列。subset表示按列删空时, 需要考虑的行,默认是所有行,也可以指定行。在实际操作中,很少会出现一列都是空值的情况,因为如果一列都是空值,那么这一列也就没有包含任何信息。例如代码如下:data_drop3 = data.dropna(axis= 1 ,how=air,subset=range(2,len(data)print。按列删空,删除行索引2之后全部都为空值的列:n”,data_drop3)【结果分析】len(data)表示数据的长度,即I en (data)等于4 , range (

10、2, len (data)就是指range (2, 4),因为range表示的是左闭右开的列表,即行 索引2和3,所以range (2, I en (data)就可以表示行索引2之后的全部行。输出结果如图3-*所示。Run:3-5Process finished with exit code 0C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-5.py 初始数据为:abed0 1.0 2.03.04.0X1 NaN NaNNaNNaN2 9.0 NaNNaNNaN3 NaN NaN 15.0 16

11、.0按列删空,删除行2之后全部都为空值的列: acd01.03.04.0NaNNaNNaN9.0NaNNaNNaN15.016.0图3-*删除空所在值列例如结果【结果分析】按列删空时,subset表示行索引号,进一步分析行索引号2之后 的所有行。在how默认等于all的情况下,b列行索引2和行索引3都是空值,所 以b列被删除了,保存了 a、c、d列的数据。二、数据去重去除重复数据也是数据分析经常面对的问题之一,常见的重复值完全相同的行数 据,或是某几列相同的行数据。.查看重复值去除重复数据之前,首先需要了解数据中的重复情况,pandas提供了 duplicates 函数,用来查看数据中的重复情

12、况,duplicates函数一般用法为:DataFrame.duplicates(subset, inplace)其中,subset表示列名。默认为None,表示全部列,即如果一行的所有列出现重 复就返回结果。,删除重复值去除重复数据可以使用pandas提供的去重drop_duplicates函数。使用 drop_duplicates函数对数据进行去重,不会改变数据源的原始排列,并且具有代码简 洁和运行稳定的优点。drop_duplicates函数的一般用法为:DataFrame.drop_duplicates(subset, keep, inplace)其中,subset表示列名。默认为No

13、ne,表示全部列,即如果一行的所有列出现重 复就删除。keep表示出现重复时保存第一次出现的数据还是最后一次出现的数据,first 表示保存第一次出现的数据,last表示保存最后一次出现的数据。默认为first,即如 果出现重复,保存第一次出现的数据。任务实训任务 1 :利用 read excel 导入 supermarket.xlsx (supermarket.xlsx 存放在 c:data 路径中)中的“销售统计”工作表(第1张工作表),将导入数据的前5行命名为datal,并完成:(1)统计各列的空值频数。(2)删除“客户ID”和“客户姓名”都是空值的行。(3)删除一列中所有的值都为空值的

14、列。任务1 (1)具体代码如下: pd.set_option(display.max_columns,None) pd.set_optionCdisplay. width*,None)pd.set_option(,True)datal = pd.read_excel(c:datasupermarket.xlsx).head print(导入的数据为:ndatal)result = datal.isnull().sum()print(各列的空值频数为:n,resultresult0) #通过resultresultO仅仅显示出现 空值的列输出结果如图3-*所示。17* 10产品ID产品名称客户I

15、D客户姓名省城市ta分 仃国日期 发货日期取价 na记金静折扣析扣金做0US-2018-1357144办公用-用品-10002717Fiskars野刀,蓝色14485.0NaN涌江杭州公司 2018-04-27 2018-04-296521300.451CN-2018-1973789办公用-信封-10004832Globeweis搭扣信封,红色10165.0许安四川内江消费者 2018-86-15 2018-06-196321260.02CN-2018-1973789办公用-装订-10001505Cardinal孔加固材料,回收1016S.0许安四川内江消费者 2018-O6-1S 2018-

16、06-19162320.4与3US-2018-3017568办公用-用8-10003746Kleencut开信刀,工业NaNNaN江苏慎江公司 2018-12-09 2018-12-138043200.44CN-2017-2975416力公用183352KitchenAid搅搏机,黑色15730.0万丝广东汕头消费者 2917-05-31 2017-06-02459313770.0Run:3-S导入的收媚为:各那么的空值跖U为:客户ID 1客户姓名 2折扣金献 5dtype: int64r aN Nail NahhaM Na iProcess finished with exit code 0

17、图3.*任务1(1)输出结果任务1 (2)具体代码如下:datal_dropl = datal .dropna(axis=0,how=an,subset=客户 ID?客户姓名口) print(”删除“客户ID”和“客户姓名”都是空值的行:n”,datal_dropl) 输出结果如图3-*所示。Run:3-5C:U$er$li1iangAnaconda3python.exe C:/U$er5/liliang/PycharmProject$/sjfx/3-5.py 前除“客户ID”和“客户姓名”都是空俺的行:tr* id产品ID产品名称客户ID客户姓名省城市细分、订单日期发货日期单价数隹售金璇折扣

18、折扣金额S:rp0US-2018-1357144办公用-用品-10002717Fiskars 91J),R色14485.0NaN潮江杭州公司2018-04-272018-04296S.02.0130.00.4NaN1CN 2018-1973789办公用-信封-10004832GlobeWeis停扣信封.红色10165.0许安四川内江201806-152018-06-1963.02.0126.00.0NaN*二2CN-2018-1973789办公用装订-1000150sCardinal孔加固材料,10165.0许安四川内江消费者2018-06-1S2018-06-1916.02.032.00.4

19、NaN4CN-2017-2975416办公用-器具-100。3452KitchenAid 傥拌机.黑色15730.0万兰广东汕头消费召2017-05-312017-06-02459.03.01377.00.0NaNProcess finished with exit code 0图3.*任务1 (2)输出结果【结果分析】从结果中可以看到,因为行索引为3的“客户ID”和“客户姓名” 都是空值,所以这一行被删除了。任务1 (3)具体代码如下: data 1 _drop2 = data 1 .dropna(axis= 1 ,how=air)print(删除一列中所有的值都为空值的列:n”,datal

20、_drop2) 输出结果如图3-*所示。Run:3-5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-5.py除一列中所有的值都为空值的列:iT* ID产品ID产品名琳客户ID客户姓名省城市他分 订早日期发货日期价销件金额折扣220US-2018-13S7144办公用-用品-10002717Fiskars 喇刀,蓝色14488.0NaN游江杭州公3 2018-04-272018-04-2965.02.0130.00.41CN-2018-1973789办公用-信封10004832GlobeWeis

21、 梏相信14,红色10165.0许安四川内江消费省 2018-06-152018-06-1963.02.0126.00.0*2CN-2018-1973789办公用-装订-10001505Cardinal孔加固材料,回收10165.0许安四川内江消费者 2018-06-1S2018-06-1916.02.032.00.43US-2018-3017568办公用-用品-10003746Kleencut开信刀,工业NaNNaN江芬慎江公司 2018-12-092018-12-1380.04.0320.00.44CN-2017-297S416办公用器具-10003452KitchenAid 授样机,黑色

22、15730.0万兰广东汕头消费者 2017-05-312017-06-02459.03.01377.00.0Process finished with exit code 0图3-*任务1 (3)输出结果【结果分析】从结果中可以看到,因为“折扣金额”这一列的所有值都为空值, 所以这一列被删除了。任务 2:利用 read_excel 导入 supermarket.xlsx (supermarket.xlsx 存放在 c:data 路 径中)中的“销售统计,工作表(第1张工作表),将导入数据的前50行命名为data2, 并完成:(1)根据shape属性,查看数据data2的行数。(2)利用dupl

23、icates函数,查看“订单ID”、“产品ID”、“产品名称”三列出现 重复的数据的前10列。(3)利用drop_duplicates函数,删除“订单ID”、“产品ID”、“产品名称”三 列出现重复的数据,并保存第一次出现的数据,结果存放在data2_drop中,查看 data2_drop的前15行与前10列。(4)根据shape属性,查看数据data2_drop的行数。任务2 (1)具体代码如下:print(ndata2 的行数为:,data2.shape0)输出结果如图3-*所示。Run:3-5AC:UsersliliangAnaconda3python.exe C:/Users/lili

24、ang/PycharmProjects/sjfx/3-5.pydata2的行数为:50 Process finished with exit code 0 图3-*任务2 (1)输出结果任务2 (2)具体代码如下:data2_dup = data2data2.duplicated(订单 ID?产品 ID?产品名称)print,”订单ID?产品ID?产品名称,出现重复的数据为:n”,data2_dup.ilocS10)输出结果如图3-*所示。Run:3-5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx

25、/3-5.py ,订单I/产品ID,产品名称,出现重复的数据为:订单ID产品ID产品名称客户ID客户姓名省城市细分订单日期发货日期F58CN-2016-4497736办公用-系固-1000480TStockwell橡皮筋,整包18325.0俞明江西景德镇消费者2016-10-27201610-319CN-2016-4497736办公用-系固-10004801Stockwell橡皮筋,整包18325.0俞明江西景德镇消费者2016-10-27201610-3113CN-2016-2752724办公用-信封-10000017Jiffy局间信封,银色10885.0赵婵山东青岛消费者2016-06-0

26、5201606-0914CN-2016-2752724办公用-信封-100000173iffy局间信封,银色10885.0赵婵山东青岛消费者2016-06-05201606-0921CN-2018-5631342办公用-装订-10004369Cardinal装订机,回收14050.0白鹄上海上海消费者2018-10-02201810-0422CN-2018-5631342办公用-装订-10004369Cardinal装订机,回收14050.0白鹄上海上海消费者2018-10-02201810-0423CN-2018-5631342办公用-装订-10004369Cardinal装订机,回收140

27、50.0白鹄上海上海消费者2018-10-02201810-04Process finished with exit code 0图3-*任务2 (2)输出结果【结果分析】iloc函数可以按照先行(行索引编号)后列(列索引编号)的顺 序选取数据,在中,逗号前的“:”表示默认选取所有行,逗号后的“:10”表示从默认列索引。到9,原因是左闭右开索引区间,所以10是不能取到的,因此 就是前10列。任务2 (3)具体代码如下:data2_drop = data2.drop_duplicates(subset=f 订单 ID?产品 ID?产品名称 ,keep=,first,)print,订单ID?产品I

28、D;产品名称,出现重复的数据删除后的数据为:n,data2_drop.iloc: 15,: 10)输出结果如图3-*所示。Rum3-5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharProjects/sjfx/3-5.py,订单ID,产品nr,产品名称出现至复的数据IB除后的数拈为: 9 ,订单ID产品ID产品名称客户ID客户姓名省城市细分 订单日期发货日期rp0US-2018-1357144办公用-用品-10002717Fiskars剪刀,鉴色14485.0NaN浙江杭州公司2018-04-272018-04-291CN-20

29、18-1973789办公用-信封-10004832GlobeWeis搭扣信封,红色10165.0许安四川内江消费者2018-06-152018-06-192CN-2018-1973789办公用-装订-10001505Cardinal孔加固材料,回收10165.0许安四川内江消费者2018-06-152018-06-193US-2018-3017568办公用用品-10003746Kleencut开信刀,工业NaNNaN江苏镇江公司2018-12-092018-12-134CM-2617-2975416办公用-器具10003452KitchenAid 搅拌机,36色15730.0万兰广东汕头一费者

30、2017-05-312017-06-025CN-2016-4497736技术-设各-10001640柯尼卡打印机,红色18325.0南明江西景德慑消费占2016-10-272016-10-316CN-2016 4497736办公用-装订-10001029Ibico订书机,实惠18325.0俞明江西景他镇消费者2016-10-272016-10-317CN-2016 4497736办公用系固-10004801Stockwell橡皮筋,空包18325.0南明江西景德镇消费152016-10-272016-10-3110CN-2015 4195213技术-设名-10000001爱普生计算器,耐用21700.0谢霎陕西榆林小星企业2015-12-222015-12-2411CN-2018-5801711技术-复印-10002416惠吉墨水,红色19585.0康而累龙江哈尔滨消费国2018-06-012018-06-0612CN-2016-2752724办公用-信封-10000017Jiffy局间信封,板色10885.0赵婵

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论