Python数据分析与可视化教案3.6 数据的填充与替换.docx

上传人:太** 文档编号:62304848 上传时间:2022-11-22 格式:DOCX 页数:6 大小:41.46KB
返回 下载 相关 举报
Python数据分析与可视化教案3.6 数据的填充与替换.docx_第1页
第1页 / 共6页
Python数据分析与可视化教案3.6 数据的填充与替换.docx_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《Python数据分析与可视化教案3.6 数据的填充与替换.docx》由会员分享,可在线阅读,更多相关《Python数据分析与可视化教案3.6 数据的填充与替换.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、课 题3.6数据的填充与替换课 型讲练授课班级大数据授课时数2教学目标1 .能够利用指定值或统计指标填充空值。2 .能够将数据中的指定值进行替换。教学重点1 .能够利用指定值或统计指标填充空值。2 .能够将数据中的指定值进行替换。教学难点1.替换时注意字典的使用方法。学情分析学情分析在数据预处理时,常常需要将字符型数据的单位去掉变为数值型,这就需要使用替换的方法,替换时需要有时需要用到之前学到的字典。在对数据进行预处理时,去空和去重是两个非常重要的方法。去空是指去除带有 空值的数据,去重是指去除重复数据。一、数据去空数据中的某个或某些特征的值是不完整的,这些值称为缺失值,简单来说,缺失 值就是

2、空值。1 .查看空值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#表示将行索引编号1到2,列索引编号1到3的数据都

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.29NaNNaNNaNW3 13 NaN 1

4、5.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)其中,各个参数的作用如下:axis接收

5、。或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,inplace)其中,axis=0为

6、删除空值所在的行。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:/Users/liliang/Pycharm

7、Projects/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表示按行删空,subset表示列名,进一

8、步分析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为删除空值所在的列。在按列删空时,how一般取就

9、,默认也是 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 (2, len (data)就是指r

10、ange (2, 4),因为range表示的是左闭右开的列表,即行 索引2和3,所以range(2, len(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.0按列删空,删除行2之后全部都为空值的

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

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

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

14、体代码如下: 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产品名称客户ID客户姓名省城市ta分

15、 仃国日期 发货日期取价 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-06-19162320

16、.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图3.*任务1(1)输

17、出结果任务1 (2)具体代码如下:datal_dropl = datal.dropna(axis=0,how=air,subset=,7j 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客户姓名省城市细分、订单日期发货日期单价数隹售金璇折扣折扣金额S:rp0U

18、S-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.4NaN4CN-201

19、7-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 = datal .dropna(axis= 1 ,how=air)print(删除一列中所有的值都为空值的列:n”,datal_drop2) 输出结

20、果如图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 梏相信14,红色10

21、165.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 授样机,黑色15730.0万兰广东

22、汕头消费者 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)利用duplicates函数,查看

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

24、Projects/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/3-5.py ,订单

25、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-05201606-091

26、4CN-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装订机,回收14050.0白鹄上海上海消

27、费者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?产品ID;产品名称,出现重

28、复的数据删除后的数据为:n,data2_drop.iloc: 15,: 10)输出结果如图3-*所示。Rum 3-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-2018-197378

29、9办公用-信封-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万兰广东汕头一费者2017-05-3

30、12017-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谢霎陕西

31、榆林小星企业2015-12-222015-12-2411CN-2018-5801711技术-复印-10002416惠吉墨水,红色19585.0康而累龙江哈尔滨消费国2018-06-012018-06-0612CN-2016-2752724办公用-信封-10000017Jiffy局间信封,板色10885.0赵婵山东青岛消费者2016-06-052016-06-0915US-2017 2511714办公用器具10003582KitchenAid冰箱,黑色2096S.O刘斯江苏徐州公司2017-11-222017 11-2516US-2017-2511714办公用-标签-10004648Novime

32、x圆形标签,红色20965.0刘斯江苏徐州公司2017-11-222017-11-2517CN-2018-5631342技术-配件-10001200Memorex储盘,实惠14050.0白鹄上海上骞消期占2018-10-022018-10-0418CN-2018-5631342办公用-用品10000039Acme尺子,工业14050.0白慎上海上海消费者2018-10-022018-10-04Process finished with exit code 0图3-*任务2 (3)输出结果任务2 (4)具体代码如下:print(进行去重操作后data2的行数为:data2_drop.shape0

33、)输出结果如图3-*所示。Run:3-5AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-5.py进行去重操作后data2的行数为:43。 rp Process finished with exit code 0 图3-*任务2 (4)输出结果巩固训练利用read_csvl导入score.csv (score.csv存放在c:data路径中),数据源如图并完 成:J score -记事本文件(F)编辑(E)格式(O)查看(V)帮助(H)ID,gender,area,math,Chinese,english,computer女江苏苏州,88,97,73,9492102,男97,98,62,9492103,女,江苏-盐城,92104江苏-苏州,70,98,87,8492105,男,江苏-连云港,80,86,80,8992106女山东-济南93,89,61,9192107,女,江苏-常州,56,91,51,81图3-*练习源数据(局部)(1)各列的空值频数。(2)删除两列“gender”和“area”中任意一个为空值的行。(3)删除4个科目列全为空值的行。(4)删除两列“gender”和“area”中有重复值的行,保存最后一次出现的值。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁