Pandas玩转数据(八) -- 时间序列简单操作

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

from datetime import datetime

# 生成一个时间
t1 = datetime(2009, 10, 20)
t1
Out[7]: datetime.datetime(2009, 10, 20, 0, 0)

# 手写一个时间列表
date_list = [datetime(2016,9,1), datetime(2016,9,10), datetime(2017,9,1),datetime(2017,9,20),datetime(2017,10,1)]

date_list
Out[12]: 
[datetime.datetime(2016, 9, 1, 0, 0),
 datetime.datetime(2016, 9, 10, 0, 0),
 datetime.datetime(2017, 9, 1, 0, 0),
 datetime.datetime(2017, 9, 20, 0, 0),
 datetime.datetime(2017, 10, 1, 0, 0)]

# Series是index改为date_list
s1 = Series(np.random.rand(5), index=date_list)

s1
Out[14]: 
2016-09-01    0.091639
2016-09-10    0.823207
2017-09-01    0.082705
2017-09-20    0.162824
2017-10-01    0.379725
dtype: float64

s1.values
Out[15]: array([ 0.09163872,  0.82320691,  0.08270518,  0.16282401,  0.37972535])
# index 是一个DatetimeIndex
s1.index
Out[16]: 
DatetimeIndex(['2016-09-01', '2016-09-10', '2017-09-01', '2017-09-20',
               '2017-10-01'],
              dtype='datetime64[ns]', freq=None)
# 对Series访问
s1[datetime(2016,9,10)]
Out[18]: 0.82320691034095983

s1['2016-9-10']
Out[19]: 0.82320691034095983

s1['2016/9/10']
Out[20]: 0.82320691034095983

s1['20160910']
Out[21]: 0.82320691034095983
# 不可以直接'201609',报错
s1['2016-09']
Out[22]: 
2016-09-01    0.091639
2016-09-10    0.823207
dtype: float64

s1['2016']
Out[23]: 
2016-09-01    0.091639
2016-09-10    0.823207
dtype: float64


# pandas生成Datetime,一个开始参数,一个结束参数,periods表示数量,freq表示间隔
# 生成100个,freq默认为'D'天数
date_list_new = pd.date_range('2016-01-01', periods=100)
date_list_new
Out[29]: 
DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',
               '2016-01-05', '2016-01-06', '2016-01-07', '2016-01-08',
               '2016-01-09', '2016-01-10', '2016-01-11', '2016-01-12',
               '2016-01-13', '2016-01-14', '2016-01-15', '2016-01-16',
               '2016-01-17', '2016-01-18', '2016-01-19', '2016-01-20',
               '2016-01-21', '2016-01-22', '2016-01-23', '2016-01-24',
               '2016-01-25', '2016-01-26', '2016-01-27', '2016-01-28',
               '2016-01-29', '2016-01-30', '2016-01-31', '2016-02-01',
               '2016-02-02', '2016-02-03', '2016-02-04', '2016-02-05',
               '2016-02-06', '2016-02-07', '2016-02-08', '2016-02-09',
               '2016-02-10', '2016-02-11', '2016-02-12', '2016-02-13',
               '2016-02-14', '2016-02-15', '2016-02-16', '2016-02-17',
               '2016-02-18', '2016-02-19', '2016-02-20', '2016-02-21',
               '2016-02-22', '2016-02-23', '2016-02-24', '2016-02-25',
               '2016-02-26', '2016-02-27', '2016-02-28', '2016-02-29',
               '2016-03-01', '2016-03-02', '2016-03-03', '2016-03-04',
               '2016-03-05', '2016-03-06', '2016-03-07', '2016-03-08',
               '2016-03-09', '2016-03-10', '2016-03-11', '2016-03-12',
               '2016-03-13', '2016-03-14', '2016-03-15', '2016-03-16',
               '2016-03-17', '2016-03-18', '2016-03-19', '2016-03-20',
               '2016-03-21', '2016-03-22', '2016-03-23', '2016-03-24',
               '2016-03-25', '2016-03-26', '2016-03-27', '2016-03-28',
               '2016-03-29', '2016-03-30', '2016-03-31', '2016-04-01',
               '2016-04-02', '2016-04-03', '2016-04-04', '2016-04-05',
               '2016-04-06', '2016-04-07', '2016-04-08', '2016-04-09'],
              dtype='datetime64[ns]', freq='D')
# 修改freq,每周一
date_list_new = pd.date_range('2016-01-01', periods=100, freq='W-MON')
date_list_new
Out[31]: 
DatetimeIndex(['2016-01-04', '2016-01-11', '2016-01-18', '2016-01-25',
               '2016-02-01', '2016-02-08', '2016-02-15', '2016-02-22',
               '2016-02-29', '2016-03-07', '2016-03-14', '2016-03-21',
               '2016-03-28', '2016-04-04', '2016-04-11', '2016-04-18',
               '2016-04-25', '2016-05-02', '2016-05-09', '2016-05-16',
               '2016-05-23', '2016-05-30', '2016-06-06', '2016-06-13',
               '2016-06-20', '2016-06-27', '2016-07-04', '2016-07-11',
               '2016-07-18', '2016-07-25', '2016-08-01', '2016-08-08',
               '2016-08-15', '2016-08-22', '2016-08-29', '2016-09-05',
               '2016-09-12', '2016-09-19', '2016-09-26', '2016-10-03',
               '2016-10-10', '2016-10-17', '2016-10-24', '2016-10-31',
               '2016-11-07', '2016-11-14', '2016-11-21', '2016-11-28',
               '2016-12-05', '2016-12-12', '2016-12-19', '2016-12-26',
               '2017-01-02', '2017-01-09', '2017-01-16', '2017-01-23',
               '2017-01-30', '2017-02-06', '2017-02-13', '2017-02-20',
               '2017-02-27', '2017-03-06', '2017-03-13', '2017-03-20',
               '2017-03-27', '2017-04-03', '2017-04-10', '2017-04-17',
               '2017-04-24', '2017-05-01', '2017-05-08', '2017-05-15',
               '2017-05-22', '2017-05-29', '2017-06-05', '2017-06-12',
               '2017-06-19', '2017-06-26', '2017-07-03', '2017-07-10',
               '2017-07-17', '2017-07-24', '2017-07-31', '2017-08-07',
               '2017-08-14', '2017-08-21', '2017-08-28', '2017-09-04',
               '2017-09-11', '2017-09-18', '2017-09-25', '2017-10-02',
               '2017-10-09', '2017-10-16', '2017-10-23', '2017-10-30',
               '2017-11-06', '2017-11-13', '2017-11-20', '2017-11-27'],
              dtype='datetime64[ns]', freq='W-MON')
# 间隔5小时
date_list_new = pd.date_range('2016-01-01','2016-02-01', freq='5H')
date_list_new
Out[36]: 
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 05:00:00',
               '2016-01-01 10:00:00', '2016-01-01 15:00:00',
               '2016-01-01 20:00:00', '2016-01-02 01:00:00',
               '2016-01-02 06:00:00', '2016-01-02 11:00:00',
               '2016-01-02 16:00:00', '2016-01-02 21:00:00',
               ...
               '2016-01-29 23:00:00', '2016-01-30 04:00:00',
               '2016-01-30 09:00:00', '2016-01-30 14:00:00',
               '2016-01-30 19:00:00', '2016-01-31 00:00:00',
               '2016-01-31 05:00:00', '2016-01-31 10:00:00',
               '2016-01-31 15:00:00', '2016-01-31 20:00:00'],
              dtype='datetime64[ns]', length=149, freq='5H')

# Series
s2=Series(np.random.rand(100), index=date_list_new)
s2.head()
Out[40]: 
2016-01-01 00:00:00    0.298580
2016-01-01 05:00:00    0.145782
2016-01-01 10:00:00    0.356871
2016-01-01 15:00:00    0.607690
2016-01-01 20:00:00    0.223771
Freq: 5H, dtype: float64

猜你喜欢

转载自blog.csdn.net/weixin_39778570/article/details/81115523
今日推荐