Pandas入门第六章之时间序列

前言: 数据分析中经常会碰到和时间序列相关的数据集,所以本节主要介绍一下pandas中时间序列相关的接口,同上写的比较简单,如果想要学习这个模块的话参加一个比赛还是很必要的。等从新开始比赛的时候,在向这里面增加东西吧,pandas基础教程到此为止!!!!!!!!!!!!

 

一般比赛中出现时间序列相关的数据时,对于时间序列的处理一般有三种方式。

第一: 将时间序列作为索引,将数据集分成周末和非周末,根据预测的数据是否是周末,采用不同的数据集。

第二: 使用时间序列构造特征,例如19年腾讯的这个比赛就是需要使用(时间序列+广告id)构造出每个广告每天的点击量。

第三: 举个例子吧!!!!广告的预估计中,我们要判断这个广告是否被用户点击时,我们可以考虑一下用户上次点击广告和这次点击广告的时间间隔。  这个听说过没用过!!!!!!

 

# 程序之中仅仅介绍了pandas中几种如何使用时间数据进行索引的方式,没有上述操作,因为上面的操作有点麻烦,下面介绍的内容有:

1、使用to_datetime() 将某列数据转化成时间类型

2、使用set_index() 将某列数据设置成索引的形式

3、几种常见的时间索引的方式、在某两段时间之内、以及找在某个时间点之前和之后的数据。注意在使用找某个固定时间点之前的数据集时,首先要使用sort_index()函数索引进行排序操作,不然会报错 ValueError: truncate requires a sorted index

 

import pandas as pd
import numpy as np

# 生成一个简单的DataFrame数据
data = {'name': ['YYLin', 'YYLin', 'YYLin', 'YYLin_1', 'YYLin_1', 'YYLin_1'],
        'birth_day': ['2000-01-01', '2001-02-02', '2005-03-03', '2000-01-04', '2001-02-03', '2001-06-06'],
        'age': [6, np.nan, 8,  9, np.nan, 12], 'age_1': [6, np.nan, 7,  9, np.nan, 11]}

time_data = pd.DataFrame(data)
time_data['birth_day'] = pd.to_datetime(time_data['birth_day'])
print("修改原始数据集中的格式:\n", time_data.info())

# 将 birth_day 设置成时间序列
time_data_index = time_data.set_index('birth_day')

# 对时间序列进行索引操作 索引输入的值可以不一样
print(time_data_index['2000/01'].head())

# 通过时间段进行索引操作
print("查找时间段在2000-01到2003-01的数据:\n", time_data_index['1/2000':'1/2001'])

# 查找某段时间之前的数据以及某段时间之后的数据 使用truncate必须要对数据进行排序操作
time_data_index.sort_index(inplace=True)
print("查找在2/2001之后的数据记录:\n", time_data_index.truncate(after='2/2001'))
print("查找在2/2001之前的数据记录:\n", time_data_index.truncate(before='2/2001'))

 

时间的移位操作,举个例子腾讯算法大赛的例子,在我们构造好每天每个广告的曝光量之后,但是题目要求我们的是当我设置好广告的各种信息之后,广告的第二天的曝光量是多少??? 所以在我们得到广告的曝光量之后,我们我们仅仅需要对应的时间向前移动一天即可。例如某条广告在2019-03-02的曝光量是39, 其实我可以把时间设置成2019-03-01。

 

测试时间偏移的实验结果

 

import pandas as pd
import numpy as np

ts = pd.Series(np.random.randn(4),
               index=pd.date_range('1/1/2000', periods=4, freq='D'))

print('原始数据集中的数据是:\n', ts)

shift_day = True
if shift_day:
    print('原始数据集中将天数正向偏移2之后的数据是:\n', ts.shift(1, freq='D'))
    print('原始数据集中将天数负向偏移2之后的数据是:\n', ts.shift(-1, freq='D'))
else:
    print('原始数据集中将数据正向偏移2之后的数据是:\n', ts.shift(1))
    print('原始数据集中将数据负向偏移2之后的数据是:\n', ts.shift(-1))

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值