Python数据分析与可视化教案3.8 时间的转换与提取.docx
课 题3.8时间的转换与提取课 型讲练授课班级大数据授课时数2教学目标1 .理解 Times tmap、Timedelta、Dat etime Index 等时间类的作用。2 .能够创立时间类数据。3 .能够将文本型数据转换为时间类数据。教学重点1.能够将文本型数据转换为时间类数据。教学难点1.理解 Timestmap Timedelta、Datetimeindex 等时间类的作用。学情分析学情分析在任何数据分析中,常常需要处理时间类型的数据,比方从时间中提取 出年、月、日等信息,这些内容的学习可以提高学生预处理数据的能力。数据分析的对象不仅限于数值型和字符串型两种,常用的数据类型还包括了时间 型,通过时间类型数据能够获取对应的年、月、日等信息。但是,从CSV数据中导入 数据时都是字符串的形式,无法实现大局部与时间相关的分析。因此,在进行数据序 列分析时,常常需要将字符型数据转换为时间性数据。pandas提供了多种与时间相关的类,各种时间类如表3-*所示:表3-* pandas时间相关类一、生成时间类数据类名称说明Timestmap基础的时间类,表示某个时间点,在数据分析中 经常需要从这个类中提取年、月、日的等信息。Timedelta表示时间间隔,如1天、2个小时等。Datetimeindex表示,组Timestmap构成索引Index,用来作为 DataFrame 或 Series 的索弓1。Timestamp是最基础的时间类,表示某个时间点,在绝大多数场景中的时间都是 Timestamp形式的时间。1 ,生成Timestamp类数据在pandas中,如果要生成一个Timestamp类数据,可以先创立一个字符型的时 间数据,再转化为Timestamp类数据,其一般方法为:str = 'yearmonthday houriminuteisecond1pd.Timestamp(str)例如代码如下:import pandas as pdstr = 20200202 12:30:00*data = pd.Timestamp(str)print(ndata = H,data)print,data 的数据类型为:H,type(data)输出结果如图3-求所示。3-8 xC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py data = 2020-02-02 12:30:00data的数据类型为:<class ' pandas, libs.tslibs.timestamps.Timestamp' >Process finished with exit code 0图3-*生成一个Timestamp类数据例如结果2,生成Timedelta类数据在pandas中,如果要生成Timedelta类数据,可以先创立两个Timestamp类数据, 再通过运算得到,其一般方法为:pd.Timestamp(str2) - pd.Timestamp(str 1) 例如代码如下:strl = 20200201 12:30:00'str2 = 20200202 13:30:00*datal = pd.Timestamp(str 1) data2 = pd.Timestamp(str2) data = data2 - datal print(ndata = 'data)print(Hdata 的数据类型为:type(data) 输出结果如图3-*所示。Run:3-8C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py data = 1 days 01:00:00data的数据类型为:<class 'pandas, libs.tslibs.timedeltas.Timedelta'>Process finished with exit code 0图3-*生成Timedelta类数据例如结果3.生成Datetimeindex类序列在pandas中,Datetimeindex类序列可以作为DataFrame或Series的索引。在 DataFrame中,如果将时间序列设为时间索引,那么在数据查询时会减少处理时间, 提高效率。(1)利用列表生成如果要生成一个Datetimeindex类序列,可以先创立一个字符时间型列表,再转 化为Datetimeindex类序列,其一般方法为:strjist 二田pd.to_Timedate(str_list)(2)利用 data_range 函数如果要生成一个Datetimeindex类序列,还可以利用data_range函数来生成,其 一般方法为:pd.data_range(start,stop,freq)其中,start表示开始时间,stop表示结束时间,freq表示时间频率,如freq=D 表示日,freq=H表示小时,freq二T表示分钟,freq二S表示秒。例如代码如下:list_str = 2020020r;20200202,;20200203,data = pd. to_dateti me(l i st_str)print(ndata =tdata)print(Hdata 的数据类型为:,type(data)print,")data = pd.date_range(,20200201 12:00:00,;20200201 18:00:00',freq=H)print(Hdata = 'data)print(Mdata 的数据类型为:",type(data)输出结果如图3-*所示。Run:3-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.pydata = Datetimelndex(,2020-02-01', '2020-02-02', '2020-02-03', dtype='datetime64ns', freq=None) data的数据类型为:<class ' pandas.core. indexes.datetimes.Datetimeindex' >二 5U data = Datetimelndex(,2020-02-01 12:00:00', '2020-02-01 13:00:00,» .'2020-02-01 14:00:00', '2020-02-01 15:00:00,2020-02-01 16:00:00', '2020-02-01 17:00:00,2020-02-01 18:00:00',dtype='datetime64ns', freq='H')data的数据类型为:<class ' pandas.core. indexes.datetimes.Datetimeindex' >Process finished with exit code 0图3-*生成Timedelta类数据例如结果二、转化时间数据在DataFrame中,导入的时间常常是字符串的形式,此时可以利用to_datetime 函数将将字符串的列转换为时间类型,其一般方法为:pd.to_datetime(DataFramecolumn)三、提取时间信息在处理时间数据时,常常需要提取时间中年、月、日等信息。在DataFrame中, 利用出方法可以提取一列数据中的年、月、日等信息,提取时间属性如表3-*所示:表3-*提取时间属性属性名称说明属性名称说明year年second秒month月date日期day日time时间hour小时weekday星期序号,周一为0minute分钟weekday_name星期名称提取Timestamp时间信息的一般方法为:Timestamp.出.属性名称例如代码如下:import numpy as nparr = np.arange( 1,10).reshape(3,3)data = pd.DataFrame(arr,columns=,a,bVc,)datafd1 = 20200201 10:30:00V20200202 9:45:00,20200203 14:15:00,datad' = pd.to_datetime(data*d')print("初始数据为:n”,data)print("提取 d 列中的月份为:n",datad.dt.month)print。提取d列中的小时份为:rT,datad.dthour)输出结果如图3-*所示。3-8 xC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py 初始数据为:a b cd01232020-02-0110:30:0014562020-02-0209:45:0027892020-02-0314:15:0001232020-02-0110:30:0014562020-02-0209:45:0027892020-02-0314:15:00提取d列中的月份为:021222Name: d, dtype: int64提取d列中的小时份为:01019214Name: d, dtype: int64Process finished with exit code 0图3-*提取时间信息例如结果任务实训任务 1: 利用 read_csv 导入 supermarket.csv (supermarket.csv 存放在 c:data 路径 中),导入时encoding参数使用,gbk,数据如图3-*所示。口 supermarket -记事本文件(F)编娟(E)格式(0)查看(V)帮助(H)订单ID产品ID,产品名称,客户,订单日期,发货日期US-2018-1357144,办公用-用品-10002717/Fiskars 剪刀,蓝色”,曾惠-14485,2018/4/27,2018/4/29CN-2018-1973789,办公用-信封-10004832,"GlobeWeis 搭扣信封,红色",许安-10165,2018/6/15,2018/6/19 CN-2018-1973789,办公用-装订-10001505/Cardinal 孔加固材料,回收",许安-10165,2018/6/15,2018/6/19 US-2018-3017568,办公用-用品-10003746;'Kleencut 开信刀,工业",宋良-17170,2018/12/9,2018/12/13 CN-2017-2975416,办公用-器具-10003452/KitchenAid 搅拌机,黑色",万兰-15730,2017/5/31,2017/6/2 CN-2016-4497736,技术-设备-10001640柯尼卡 打印机,红色"面明-18325,2016/10/27,2016/10/31CN-2016-4497736,办公用-装订-10001029/lbico 订书机,实惠",俞明-18325,2016/10/27,2016/10/31CN-2016-4497736,家具-椅子-10000578,"SAFCO 扶手椅,可调:俞明-18325,2016/10/27,2016/10/31CN-2016-4497736,办公用-纸张-10001629,"Green Bar 计划信息表,多色",俞明-18325,2016/10/27,2016/10/31 CN-2016-4497736,办公用-系固-10004801/Stockwell 橡皮筋,整包",俞明-18325,2016/10/27,2016/10/31完成:(1)查看“订单日期”和“发货日期”两列的数据类型。(2)将“订单日期”和“发货日期”两列的数据类型转换为“日期型”,新增列“订单处理时间。计算公式为:“订单处理时间”=“发货日期”-“订单日期”(3)查看数据的前5行。再查看“订单日期”、“发货日期”和“订单处理时间” 3列的数据类型。具体代码如下:pd.set_option(,display.max_columns,None)pd.set_option(,display.width,None)pd.set_option('display.unicode.east_asian_width',True)datal = pd.read_csv(,c:datasupermarket.csv,encoding=,gbk,)print。*时间数据转化前*”)print,”订单期,的数据类型:sn发货期,的数据类型:%s”%(datal订单日期,.dtype,datal发货日期1.dtype)print,“)datal订单日期'=pd.to_datetime(datal单日期')datal发货日期口 = pd.to_datetime(data 1发货日期')print。*时间数据转化后*”)datal订单处理时间口 = datal发货日期口 - datal订单日期口print("导入数据前5行为:n”,datal.head。)prints订单日期,的数据类型:sn,发货日期,的数据类型:sn订单处理时间,的数 据类型:s”%(datal,订单日期dtype,data%发货日期dtype,datal订单处理时间 1.dtype)输出结果如图3-*所示。Run:3-8C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py *时间数据转化前* ,订单日期,的数据类型:object 发货日期的数据类型:object*时间数据转化后* 导入数据前5行为:订单ID 产品ID 产品名称 客户 订单日期 发货日期 订单处理时间 0 US-2018-1357144 办公用-用品-10002717 Fiskars 剪刀,蓝色 曾惠-14485 2018-04-27 2018-04-29 2 days 1 CN-2018-1973789 办公用-信封-10004832 GlobeWeis 搭扣信封,红色 许安-10165 2018-06-15 2018-06-19 4 days 2 CN-2018-1973789 办公用-装订-10001505 Cardinal 孔加固材料,回收 许安-10165 2018-06-15 2018-06-19 4 days 3 US-2018-301 乃68 办公用-用品-10003746 Kleencut 开信刀,工业 宋良-17170 2018-12-09 2018-12-13 4 days 4 CN-2017-2975416 办公用-器具-10003452 KitchenAid 搅拌机,黑色 万兰-15730 2017-05-31 2017-06-02 2 days ,订单日期,的数据类型:datetime64ns '发货日期,的数据类型:datetime64ns'订单处理时间的数据类型:timedelta64nsProcess finished with exit code 0图3-*任务1输出结果【结果分析】如果不将“订单日期”和“发货日期”两列的数据类型转换为时间 型数据,公式“订单处理时间”二“发货日期”-“订单日期”是不能算出结果的,因 为字符串之间是不能进行运算的。任务2:将任务1的结果datal重新命名为data2,完成:(1)将“订单日期”中的年、月提出,并将提取的信息放入新列“年”、“月。 选取data2中2018年5月、9月的数据,并计算数据的行数。(2)将“订单日期”中的星期名称提出,并将提取的信息放入新列“星期”,选 取data2中2017年的周一的数据,并计算数据的行数。任务2 (1)具体代码如下:data2=dataldata2r 年 = data2订单日期data2r 月 口 = data2订单日期result 1 = data2.1oc(data2,l=2018)&(data2, 卜=5)|(data2r 月'=9)print(H2018 年 5 月、9 月的数据为:n”,resultl)print(n2018 年 5 月、9 月的数据行数为:“jesultl.shapeO)输出结果如图3-*所示。Run:3-8C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py2018年5月、9月的数据为:订单ID产品ID产品名称客户订单日期发货日期 订单处理时间年 月32 CN-2018-3230180 办公用-收纳-10001942Fellowes 文件车,金属 宋栋-12310 2018-09-28 2018-10-024 days 2018933 CN-2018-3230180 家具-椅子-10000374Harbour Creations 椅垫,可调 宋林-1231。2018-09-28 2018-10-024 days 2018964 CN-2018-5922906技术-设备10003635StarTech 打印机,耐用 钱伟-21430 2018-09-15 2018-09-172 days 2018986 CN-2018-3172853 办公用-标签-10000895 Harbour Creations 有色标签,可调熊丽-15805 2018-05-28 2018-06-025 days 2018593 US-2018-4733722 办公用-用品-10001876Stiletto 大剪刀,钢顾黎-1636。2018-05-21 2018-05-243 days 2018594 US-2018-4733722家具-椅子-1。4416Novimex 折叠椅,每套两件 顾黎-16360 2018-05-21 2018-05-243 days 2018595 US-2018-4733722 办公用-系固-10001646OIC 夹子,整包 顾黎-16360 2018-05-21 2018-05-243 days 2018596 US-2018-4733722 办公用-信封-10004907Ames 局间信封,银色 顾黎-16360 2018-05-21 2018-05-243 days 2018597 US-2018-4733722 办公用-美术-10002705Sanford 荧光笔,蓝色 顾黎-16360 2018-05-21 2018-0S-243 days 201852018年5月、9月的数据行数为:9Process finished with exit code 0图3-*任务2 (1)输出结果任务2 (2)具体代码如下:data2'星期=data2订单日期weekday _nameresult2 = data2.1oc(data2',=2017) & (data2星期'='Monday')print(n2017 年的周一的数据为:n”,result2)printC'2017年的周一的数据行数为:工esult2.shape0)输出结果如图3-*所示。Run:3-8订单ID产品ID产品名称客户 订单日期发货日期订单处理时间年月星期52CN-2017-2828982办公用器具-10000297Hamilton Beach 炉灶,黑色芬晒-19825 2017-05-222017-05-264 days20175Monday53CN>2017-2828982办公用器具-10002796Hamilton Beach烤面包机,银色苏方-19825 2017-05-222017-05-264 days20175Monday54CN-2017-2828982办公用收纳-10000932Rogers文件夹,蓝色苏0-19825 2017-05 222017-05-264 days20175Monday订单ID产品ID产品名称客户 订单日期发货日期订单处理时间年月星期52CN-2017-2828982办公用器具-10000297Hamilton Beach 炉灶,黑色芬晒-19825 2017-05-222017-05-264 days20175Monday53CN>2017-2828982办公用器具-10002796Hamilton Beach烤面包机,银色苏方-19825 2017-05-222017-05-264 days20175Monday54CN-2017-2828982办公用收纳-10000932Rogers文件夹,蓝色苏0-19825 2017-05 222017-05-264 days20175Monday2017年的闾一的数据行数为:3C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/3-8.py 2017年的周一的数据为:Process finished with exit code 0图3-*任务2 (2)输出结果巩固训练在data2中,将“订单日期”的日提出,并将提取的信息放入新列“日”,选取 data2中每月上旬的数据,并计算数据的行数。