欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pandas 统计分析基础 笔记3 任务4.3 转换与处理时间序列数据

程序员文章站 2022-05-07 15:20:09
...

pandas_任务4.3 转换与处理时间序列数据

!
!!
!!!可以点击下面连接

ipynb格式浏览

代码 4-41 转换字符串时间为标准时间

import pandas as pd
path = '../data'
order = pd.read_table(path+'/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)
进行转换前订单信息表lock_time的类型为: object
进行转换后订单信息表lock_time的类型为: datetime64[ns]

代码 4-42 Timestamp的最小时间和最大时间

print('最小时间为:', pd.Timestamp.min)
print('最大时间为:', pd.Timestamp.max)
最小时间为: 1677-09-21 00:12:43.145225
最大时间为: 2262-04-11 23:47:16.854775807

代码 4-43 时间字符串转换为DatatimeIndex和PeriodIndex

dateIndex = pd.DatetimeIndex(order['lock_time'])
print('转换为DatetimeIndex后数据的类型为:\n',type(dateIndex))
periodIndex = pd.PeriodIndex(order['lock_time'],freq = 'S')
print('转换为DatetimeIndex后数据的类型为:\n',type(periodIndex))
转换为DatetimeIndex后数据的类型为:
 <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
转换为DatetimeIndex后数据的类型为:
 <class 'pandas.core.indexes.period.PeriodIndex'>

代码 4-44 提取datetime数据中的时间序列数据

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.day_name() for i in order['lock_time']]
print('lock_time中的星期名称数据前5个为:',weekday1[:5])
lock_time中的年份数据前5个为: [2016, 2016, 2016, 2016, 2016]
lock_time中的月份数据前5个为: [8, 8, 8, 8, 8]
lock_time中的日期数据前5个为: [1, 1, 1, 1, 1]
lock_time中的星期名称数据前5个为: ['Monday', 'Monday', 'Monday', 'Monday', 'Monday']

代码 4-45 提取DatetimeIndex和PeriodIndex中的数据

print('dataIndex中的星期名称数据前5个为:\n',dateIndex.day_name() [:5])
print('periodIndex中的星期标号数据前5个为:',
      periodIndex.weekday[:5])
dataIndex中的星期名称数据前5个为:
 Index(['Monday', 'Monday', 'Monday', 'Monday', 'Monday'], dtype='object', name='lock_time')
periodIndex中的星期标号数据前5个为: Int64Index([0, 0, 0, 0, 0], dtype='int64', name='lock_time')

代码 4-46 使用Timedelta 实现时间数据的加运算

time1 = order['lock_time']+pd.Timedelta(days = 1) 
print('lock_time在加上一天前前5行数据为:\n',order['lock_time'][:5])
print('lock_time在加上一天前前5行数据为:\n',time1[:5])
lock_time在加上一天前前5行数据为:
 0   2016-08-01 11:11:46
1   2016-08-01 11:31:55
2   2016-08-01 12:54:37
3   2016-08-01 13:08:20
4   2016-08-01 13:07:16
Name: lock_time, dtype: datetime64[ns]
lock_time在加上一天前前5行数据为:
 0   2016-08-02 11:11:46
1   2016-08-02 11:31:55
2   2016-08-02 12:54:37
3   2016-08-02 13:08:20
4   2016-08-02 13:07:16
Name: lock_time, dtype: datetime64[ns]

代码 4-47 使用Timedelta实现时间数据的减运算

timeDelta = order['lock_time'] - pd.to_datetime('2017-1-1')
print('lock_time减去2017年1月1日0点0时0分后的数据:\n',
      timeDelta[:5])
print('lock_time减去time1后的数据类型为:',timeDelta.dtypes)
lock_time减去2017年1月1日0点0时0分后的数据:
 0   -153 days +11:11:46
1   -153 days +11:31:55
2   -153 days +12:54:37
3   -153 days +13:08:20
4   -153 days +13:07:16
Name: lock_time, dtype: timedelta64[ns]
lock_time减去time1后的数据类型为: timedelta64[ns]

代码 4-48 订单信息表时间数据转换

order = pd.read_table('../data/meal_order_info.csv',
      sep = ',',encoding = 'gbk')
order['use_start_time'] = pd.to_datetime(order['use_start_time'])
order['lock_time'] = pd.to_datetime(order['lock_time'])
print('进行转换后订单信息表use_start_time和lock_time的类型为:\n', 
      order[['use_start_time','lock_time']].dtypes)
进行转换后订单信息表use_start_time和lock_time的类型为:
 use_start_time    datetime64[ns]
lock_time         datetime64[ns]
dtype: object

代码 4-49 订单信息表时间信息提取

year = [i.year for i in order['lock_time']]## 提取年份信息
month = [i.month for i in order['lock_time']]## 提取月份信息
day = [i.day for i in  order['lock_time']]## 提取日期信息
week = [i.week for i in  order['lock_time']]## 提取周信息
weekday = [i.weekday() for i in  order['lock_time']]##提取星期信息
## 提取星期名称信息
weekname = [i.day_name() for i in  order['lock_time']]
print('订单详情表中的前5条数据的年份信息为:',year[:5])
print('订单详情表中的前5条数据的月份信息为:',month[:5])
print('订单详情表中的前5条数据的日期信息为:',day[:5])
print('订单详情表中的前5条数据的周信息为:',week[:5])
print('订单详情表中的前5条数据的星期信息为:',weekday[:5])
print('订单详情表中的前5条数据的星期名称信息为:',weekname[:5])
订单详情表中的前5条数据的年份信息为: [2016, 2016, 2016, 2016, 2016]
订单详情表中的前5条数据的月份信息为: [8, 8, 8, 8, 8]
订单详情表中的前5条数据的日期信息为: [1, 1, 1, 1, 1]
订单详情表中的前5条数据的周信息为: [31, 31, 31, 31, 31]
订单详情表中的前5条数据的星期信息为: [0, 0, 0, 0, 0]
订单详情表中的前5条数据的星期名称信息为: ['Monday', 'Monday', 'Monday', 'Monday', 'Monday']

代码 4-50 查看订单信息表时间统计信息

timemin = order['lock_time'].min()
timemax = order['lock_time'].max()
print('订单最早的时间为:',timemin)
print('订单最晚的时间为:',timemax)
print('订单持续的时间为:',timemax-timemin)

chekTime = order['lock_time'] - order['use_start_time']
print('平均点餐时间为:',chekTime.mean())
print('最小点餐时间为:',chekTime.min())
print('最大点餐时间为:',chekTime.max())
订单最早的时间为: 2016-08-01 11:11:46
订单最晚的时间为: 2016-08-31 21:56:12
订单持续的时间为: 30 days 10:44:26
平均点餐时间为: 0 days 01:12:10.326923
最小点餐时间为: -1 days +00:05:03
最大点餐时间为: 16 days 00:08:00