Python可视化(7):Pandas—转换与处理时间序列数据
数据
⽂件在⽹盘⾥哟,除此之外还有其他⽂件资料呐。
链接:
提取码:2p61
数据分析的常⽤数据类型有数值型、类别型和时间类型。时间类型数据在读⼊Python后常常以字符串的
形式出现,不便于时间数据的分析。因此,在分析时间类型数据前,需要将时间字符串进⾏转换、信息提取。
1. 什么是时间序列?
时间序列是指多个时间点上形成的数值序列,它既可以是定期出现的,也可以是不定期出现的。
时间序列的数据主要有以下⼏种:
继承了NumPy库和datetime库的时间相关模块,提供了6种时间相关的类。
1.1 类型(时间戳)
to_datatime()函数 该对象与具有⾼度的兼容性,可以直接通过 to_datetime() 函数将datetime转换为TimeStamp对象。
<_datetime('时间字符串')
1.2 DatetimeIndex 与PeriodIndex
(1) 如果 to_datetime() 函数传⼊的是多个 datetime 组成的列表,则 Pandas会将其强制转换为 DatetimeIndex 类对象。(2)DatetimeIndex与PeriodIndex函数
除了将数据从原始 DataFrame 中直接转换为 Timestamp 格式外,还可以将数据单独提取出来将其转换为DatetimeIndex或者PeriodIndex。
DatetimeIndex和PeriodIndex两者区别在⽇常使⽤的过程中相对较⼩,其中DatetimeIndex是⽤来指代⼀系列时间点的⼀种数据结构,⽽PeriodIndex则是⽤来指代⼀系列时间段的数据结构。# 将datetime 转换为Timestamp 对象import  pandas as  pd import  numpy as  np print (pd .to_datetime ('20201102'))# 读取 meal_order_info.csv ⽂件内容# 查看 lock_time 的类型# 将 lock_time 的类型转换成 Timestamp order = pd .read_table ('./meal_order_info.csv',sep = ',',encoding = 'gbk')print ('进⾏转换lock_time 的类型为:', order ['lock_time'].dtypes )order ['lock_time'] = pd .to_datetime (order ['lock_time'])print ('转换后lock_time 的类型为:',order ['lock_time'].dtypes )
1
2
3
4
5
6
7
89
10
源代码为什么可以下火车11
12
13# 传⼊多个datetime 字符串date_index = pd .to_datetime (['20201001', '20201010', '20201020'])print (date_index )# DatetimeIndex 作为 Series 对象的索引ser_obj = pd .Series (data =[3,4,5], index =date_index )print (ser_obj )# 如果希望DataFrame 对象具有时间戳索引,也可以采⽤上述⽅式进⾏创建。data = [[11,22,33],[44,55,66],[77,88,99]]df = pd .DataFrame (data , date_index )print (df )
1
2csdn圣诞树
3
4
5
6
7
8
9
10
11
12
DatetimeIndex与PeriodIndex函数及其参数说明:
(3) 转换为PeriodIndex的时候需要注意,需要通过 freq 参数指定时间间隔,常⽤的时间间隔有Y为年,M为⽉,D为⽇,H为⼩时,T为分钟,S为秒。两个函数可以⽤来转换数据还可以⽤来创建时间序列数据。
2. 创建固定频率的时间序列—pandas.date_range()
Pandas中提供了⼀个 date_range() 函数,主要⽤于⽣成⼀个具有固定频率的 DatetimeIndex对象。
(1) 当调⽤ date_range() 函数创建 DatetimeIndex 对象时,如果只是传⼊了开始⽇期(start参数)与结束⽇期(end参数),则默认⽣成的是按天计算的,即freq参数为 D。
(2) 如果只是传⼊了开始⽇期或结束⽇期,则还需要⽤ periods 参数指定产⽣多少个时间戳。
(3)如果希望时间序列中的时间戳都是每周固定的星期⼀,则可以在创建 DatetimeIndex 时将 freq 参数设为“W-MON”。# 将 lock_time 数据转换成时间戳索引dateIndex = pd .DatetimeIndex (order ["lock_time"])print (dateIndex )
1
23periodIndex = pd .PeriodIndex (order ["lock_time"], freq ="s")print (periodIndex )
1
2# 创建DatetimeIndex 对象时,只传⼊开始⽇期与结束⽇期pd .date_range ("20201201", "20210101")
1
2# 创建 DatetimeIndex 对象时,传⼊ start 与 periods 参数pd .date_range (start ="20210101", periods =10)# 创建DatetimeIndex 对象时,传⼊end 与periods 参数pd .date_range (end = "20210110", periods =10)
1
2
3
4
5网页内容编辑器
时间序列的频率 freq 默认⽣成的时间序列数据是按天计算的,即频率为“D”。“D”是⼀个基础频率,通过⽤⼀个字符串的别名表⽰,⽐如“D”是“day”的别名。
频率是由⼀个基础频率和⼀个乘数组成的,⽐如,“5D”表⽰每5天。
3. 创建时期对象
Period类 表⽰⼀个标准的时间段或时期,⽐如某年、某⽉、某⽇、某⼩时等。
创建 Period类对象的⽅式⽐较简单,只需要在构造⽅法 pd.Period() 中以字符串或整数的形式传⼊⼀个⽇期即可。
4. 提取时间序列数据信息
在多数涉及时间相关的数据处理,统计分析的过程中,需要提取时间中的年份,⽉份等数据。使⽤对应的Timestamp类属性就能够实现这⼀⽬的。pd .date_range (start ="20210101", periods =10, freq ="W-MON")
1# 创建Period 对象,表⽰从2020-01-01到2020-12-31之间的时间段p1 = pd .Period (2020)print (p1)# 表⽰从2020-11-01到2020-11-30之间的整⽉时间p2 = pd .Period ("2020-11")print (p2)# Period 对象加上⼀个整数p3 = pd .Period ("2020-11", freq ="M")p4 = p3 + 1print (p4)
1
2
3
4
5
6
7
8
9
10
11
12
结合Python列表推导式,可以实现对DataFrame某⼀列时间信息数据的提取。
4.1 加减时间数据–Timedelta 类
Timedelta是时间相关的类中的⼀个异类,不仅能够使⽤正数,还能够使⽤负数表⽰单位时间,例如1秒,2分钟,3⼩时等。使⽤
Timedelta类,配合常规的时间相关类能够轻松实现时间的算术运算。⽬前Timedelta函数中时间周期中没有年和⽉。所有周期名称,对应
单位及其说明如下表所⽰。
crontab修改后需要重启吗使⽤Timedelta ,可以很轻松地实现在某个时间上加减⼀段时间。
除了使⽤Timedelta实现时间的平移外,还能够直接对两个时间序列进⾏相减,从⽽得出⼀个Timedelta。# 提取 lock_time 的年份、⽉份、⽇期、星期⼏ 数据前5个year1 = [i .year for  i in  order ['lock_time']]print ('lock_time 中的年份数据前5个为:',year1[:5])month1 = [i .month for  i in  order ['lock_time']]print ('lock_time 中的⽉份数据前5个为:',month1[:5])day1 = [i .day for  i in  order ['lock_time']]print ('lock_time 中的⽇期数据前5个为:',day1[:5])weekday1 = [i .dayofweek +1 for  i in  order ['lock_time']]print ('lock_time 中的星期数据前5个为:',weekday1[:5])# 在DatetimeIndex 和PeriodIndex 中提取信息print ('dateIndex 中的年份数据前5个为:\n',      dateIndex .year [:5])print ('per
iodIndex 中的年份数据前5个为:',      periodIndex .year [:5])
1
2
3
4
5
python入门教程网盘6
7
8
9
10
11
12
13
14
15# 将lock_time 数据向后平移⼀天time1 = order ['lock_time']+pd .Timedelta (days = 1) print ('lock_time 在加上⼀天前前5⾏数据为:\n',order ['lock_time'][:5])print ("-"*40)print ('lock_time 在加上⼀天前前5⾏数据为:\n',time1[:5])
1
javascript程序设计形成性考核册2
3
4
5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。