pandas中的时间序列

一,夯实基础


# datetime 模块中的数据类型
# date:以公历形式存储日历日期(年月日)
# time:将时间存储为时分秒毫秒
# datetime:存储日期和时间
# timedelta:表示两个datetime值之间的差(日,秒,毫秒)

# 1,获取当前日期及时间
from datetime import datetime
now = datetime.now()
print now  # 2020-06-23 21:43:10.839847
print now.year  # 2020
print now.month  # 6
print now.day  # 23

# 2,给datetime对象加上或者减去一个或者多个timedelta,这样会产生一个新对象,
from datetime import timedelta
start = datetime(2011, 1, 7)
end = start + timedelta(12)  # 在start基础上往后增加了12天,即2011-01-19 00:00:00

# 3,字符串和datetime的相互转换
stamp = datetime(2011, 1, 3)
str_timestamp = str(stamp)
print str_timestamp  # 2011-01-03 00:00:00

# 4,字符串格式化
value = '2020-01-03'
print datetime.strptime(value, '%Y-%m-%d')  # 2020-01-03 00:00:00

# 5,如下的 parse 可以解析几乎所有人类能够理解的日期表示形式
from dateutil.parser import parse
print parse('2020-06-23')  # 2020-06-23 00:00:00
print type(parse('2020-06-23'))  # <type 'datetime.datetime'>

print parse('7/6/2011')  # 2011-07-06 00:00:00
print parse('Jan 31,1997 10:45 PM')  # 2020-01-31 22:45:00
print parse('6/12/2011', dayfirst=True) # 2011-12-06 00:00:00  ,在国际通用的格式中,日通常出现在月的前面


# 6,pandas通常用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列,to_datetime可以解析多种不同的日期表示形式
datestrs=['7/6/2021','8/6/2021']
print pd.to_datetime(datestrs)   # DatetimeIndex(['2021-07-06', '2021-08-06'], dtype='datetime64[ns]', freq=None)

二,使用时间序列

# 1,生成一段时间序列
data = pd.date_range(start='20200601', end='20200622')
# 运行结果:
'''
DatetimeIndex(['2020-06-01', '2020-06-02', '2020-06-03', '2020-06-04',
           '2020-06-05', '2020-06-06', '2020-06-07', '2020-06-08',
           '2020-06-09', '2020-06-10', '2020-06-11', '2020-06-12',
           '2020-06-13', '2020-06-14', '2020-06-15', '2020-06-16',
           '2020-06-17', '2020-06-18', '2020-06-19', '2020-06-20',
           '2020-06-21', '2020-06-22'],
          dtype='datetime64[ns]', freq='D')
'''
print data

# 2,每月最后一个工作日('BM')
data2 = pd.date_range(start='20200401', end='20200531', freq='BM')

print data2  # DatetimeIndex(['2020-04-30', '2020-05-29'], dtype='datetime64[ns]', freq='BM')

# 3,按照一定的频次
data3 = pd.date_range(start='20200401', periods=10, freq='WOM-3FRI')

'''
DatetimeIndex(['2020-04-17', '2020-05-15', '2020-06-19', '2020-07-17',
           '2020-08-21', '2020-09-18', '2020-10-16', '2020-11-20',
           '2020-12-18', '2021-01-15'],
          dtype='datetime64[ns]', freq='WOM-3FRI')
'''
print data3

# 4,在DataFrame中使用时间序列
index = pd.date_range('20200601', periods=10)
df = pd.DataFrame(np.random.rand(10), index=index)

# 运行结果如下:

'''
                       0
2020-06-01  0.663568
2020-06-02  0.820586
2020-06-03  0.727429
2020-06-04  0.806351
2020-06-05  0.866392
2020-06-06  0.531439
2020-06-07  0.823463
2020-06-08  0.670433
2020-06-09  0.618233
2020-06-10  0.572313

'''
print df

 

三,重采样

将时间序列从一个频率转化为另一个频率进行处理的过程。

  • 降采样:将高频数据转化为低频数据;

  • 升采样:将低频数据转化为高频;

# 1,numpy.random.uniform(low,high,size):从一个均匀分布[low,high)中随机采样
t=pd.DataFrame(data=np.random.uniform(10,50,(100,1)),index=pd.date_range('20200101',periods=100))
'''
运行结果如下:
                        0
2020-01-01  16.109240
2020-01-02  37.109396
2020-01-03  41.100273
2020-01-04  36.250896
2020-01-05  21.385565
2020-01-06  20.408651
2020-01-07  10.601832
2020-01-08  48.990757
2020-01-09  44.897395
2020-01-10  27.872911
2020-01-11  43.644149
2020-01-12  13.645889
2020-01-13  31.969064
2020-01-14  16.091363
2020-01-15  18.483800
2020-01-16  11.795118
2020-01-17  43.911655
2020-01-18  40.053488
2020-01-19  32.196706
2020-01-20  45.209541
2020-01-21  26.806089
2020-01-22  49.444711
2020-01-23  24.447382
2020-01-24  27.618497
2020-01-25  19.940859
2020-01-26  21.563518
2020-01-27  14.521243
2020-01-28  48.821115
2020-01-29  31.634394
2020-01-30  26.270981
...               ...
2020-03-11  37.083283
2020-03-12  37.582650
2020-03-13  30.518648
2020-03-14  37.961496
2020-03-15  10.778531
2020-03-16  29.848324
2020-03-17  38.424908
2020-03-18  35.883167
2020-03-19  40.830069
2020-03-20  30.132450
2020-03-21  37.326055
2020-03-22  31.600755
2020-03-23  27.059394
2020-03-24  19.986316
2020-03-25  41.713622
2020-03-26  34.950293
2020-03-27  47.312944
2020-03-28  42.995630
2020-03-29  33.860867
2020-03-30  30.379033
2020-03-31  43.747291
2020-04-01  38.165414
2020-04-02  11.608507
2020-04-03  16.251798
2020-04-04  45.453179
2020-04-05  26.159734
2020-04-06  25.182784
2020-04-07  32.538120
2020-04-08  28.565222
2020-04-09  48.178500

[100 rows x 1 columns]
'''
print t

# 2,下采样,每个月一个样本,然后求其平均
mean=t.resample('M').mean()
'''
运行结果如下:
                        0
2020-01-31  31.483178
2020-02-29  29.002540
2020-03-31  30.286941
2020-04-30  32.264590
'''
print mean

# 3,下采样,每十天一个样本,然后求其个数
count=t.resample('10D').count()
'''
运行结果如下:
                 0
2020-01-01  10
2020-01-11  10
2020-01-21  10
2020-01-31  10
2020-02-10  10
2020-02-20  10
2020-03-01  10
2020-03-11  10
2020-03-21  10
2020-03-31  10
'''
print count

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值