____tz_zs
使用 pandas.date_range 函数,能够非常方便的生成 指定频率、指定起始时间的时间序列。
pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
参数:
返回值:
简单示例:
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
tz_zs
"""
import pandas as pd
import time
date_time_index = pd.date_range(start="6/29/2018", end="7/2/2018")
print date_time_index
date_time_index = pd.date_range(start="6/29/2018", periods=4)
print date_time_index
date_time_index = pd.date_range(periods=4, end="7/2/2018")
print date_time_index
date_time_index = pd.date_range(start="2018-06-29", end="2018-07-02")
print date_time_index
date_time_index = pd.date_range(start="2018-6-29", end="2018-7-2")
print date_time_index
'''
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
'''
数据格式 string 或 DateOffset,默认值是 'D',表示以自然日为单位。这个参数用来指定计时频率,比如 '5H' 表示每隔 5 个小时计算一次。
一些串别名被赋予有用的常见时间序列频率。我们将把这些别名称为偏移别名。
B 工作日频率
D 日历日频率
W 每周频率
W-SUN 星期天为起始(Sundays). 等同 ‘W’
W-MON 星期一为起始(Mondays)
W-TUE 星期二为起始(Tuesdays)
W-WED 星期三为起始(Wednesdays)
W-THU 星期四为起始(Thursdays)
W-FRI 星期五为起始(Fridays)
W-SAT 星期六为起始(Saturdays)
WOM 每月的第几周的第几天BH 工作小时级频率
H 小时级频率
T,min 分钟级频率
S 秒级频率
L,ms 毫秒
U,us 微秒
N 纳秒M 月结束频率,如'2018-11-30', '2018-12-31'
SM 半月结束频率(15日和月末)
BM 工作月结束频率
MS 月起始频率,如'2018-12-01'
SMS 短信半月开始频率(第1和第15)
BMS 工作月份开始频率Q 季末频率
BQ 工作季度结束频率
QS 季度开始频率
BQS 工作季度开始频率A,Y 年结束频率,如'2000-12-31'
A-DEC 年级别的频率,以 十二月(December) 为年底,等同 'A'。
A-JAN 年级别的频率,以 一月(January )为年底。(其他二到十一月:FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV)
BA,BY 工作年度结束频率
AS,YS 年开始频率
BAS,BYS 工作年度开始频率更多:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases
示例:
# freq 字段
date_time_index = pd.date_range(start="2018-01-01", end="2018-07-01", freq='M')
print date_time_index
date_time_index = pd.date_range(start="2018-01-01", end="2018-07-01", freq='3M')
print date_time_index
'''
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
'2018-05-31', '2018-06-30'],
dtype='datetime64[ns]', freq='M')
DatetimeIndex(['2018-01-31', '2018-04-30'], dtype='datetime64[ns]', freq='3M')
'''
# 组合频率
d = pd.date_range("20190101", "20190215", freq='7D')
print(d)
"""
DatetimeIndex(['2019-01-01', '2019-01-08', '2019-01-15', '2019-01-22',
'2019-01-29', '2019-02-05', '2019-02-12'],
dtype='datetime64[ns]', freq='7D')
"""
d = pd.date_range("20190101", "20190102", freq='2h30min')
print(d)
"""
DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 02:30:00',
'2019-01-01 05:00:00', '2019-01-01 07:30:00',
'2019-01-01 10:00:00', '2019-01-01 12:30:00',
'2019-01-01 15:00:00', '2019-01-01 17:30:00',
'2019-01-01 20:00:00', '2019-01-01 22:30:00'],
dtype='datetime64[ns]', freq='150T')
"""
WOM 每月的第几周的第几天
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
import pandas as pd
date_range = pd.date_range(start="2018-11-16", end="2019-01-08", freq="W-MON")
print(date_range)
"""
DatetimeIndex(['2018-11-19', '2018-11-26', '2018-12-03', '2018-12-10',
'2018-12-17', '2018-12-24', '2018-12-31', '2019-01-07'],
dtype='datetime64[ns]', freq='W-MON')
"""
date_range = pd.date_range(start="2018-09-16", end="2019-03-18", freq="WOM-2MON") # 每月的第二个星期一
print(date_range)
"""
DatetimeIndex(['2018-10-08', '2018-11-12', '2018-12-10', '2019-01-14',
'2019-02-11', '2019-03-11'],
dtype='datetime64[ns]', freq='WOM-2MON')
"""
参数 tz 默认值:None,可以是 string 或 None,表示时区,例如:'Asia/Hong_Kong'。
# tz 字段,设置时区
date_time_index = pd.date_range(start="2018-06-29", end="2018-07-02", tz='Asia/Hong_Kong')
print date_time_index
'''
DatetimeIndex(['2018-06-29 00:00:00+08:00', '2018-06-30 00:00:00+08:00',
'2018-07-01 00:00:00+08:00', '2018-07-02 00:00:00+08:00'],
dtype='datetime64[ns, Asia/Hong_Kong]', freq='D')
'''
参数 closed 默认值为 None,可以是 string 或者 None,表示 start 和 end 这个区间端点是否包含在区间内,可以有三个值,'left' 表示左闭右开区间,'right' 表示左开右闭区间,None 表示两边都是闭区间。
# closed 字段的作用
date_time_index = pd.date_range(start="2018-06-29", end="2018-07-02", closed=None)
print date_time_index
date_time_index = pd.date_range(start="2018-06-29", end="2018-07-02", closed='left')
print date_time_index
date_time_index = pd.date_range(start="2018-06-29", end="2018-07-02", closed='right')
print date_time_index
'''
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-29', '2018-06-30', '2018-07-01'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-06-30', '2018-07-01', '2018-07-02'], dtype='datetime64[ns]', freq='D')
'''
.
pandas.date_range 函数的返回值为一个 pandas.DatetimeIndex 对象。他是一个 datetime64 数据格式的不可变 ndarray,内部实现为 int64,可以携带频率信息等元数据传入到 Timestamp 对象(datetime 的子类)中。
pandas.DatetimeIndex 有许多属性和方法,能方便的转化和获取想要的输出结果。在此不做赘述,以后与同类型对象一起介绍。
属性:
year
month
day
hour
minute
second
microsecond
nanosecond
date
time
timetz
dayofyear
weekofyear
week
dayofweek
weekday
quarter
tz
freq
freqstr
is_month_start
is_month_end
is_quarter_start
is_quarter_end
is_year_start
is_year_end
is_leap_year
inferred_freq
方法:
normalize
strftime
snap
tz_convert
tz_localize
round
floor
ceil
to_period
to_perioddelta
to_pydatetime
to_series
to_frame
month_name
day_name
mean
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
@author: tz_zs
"""
from collections import Iterator
import pandas as pd
date_range = pd.date_range(start="2017-01-01 10:00:00", end="2017-01-01 14:00:00", closed="left", freq="1h").format(formatter=lambda x: x.strftime('%Y-%m-%dT%H-%M-%SZ-1min'))
print(date_range) # list
"""
['2017-01-01T10-00-00Z-1min', '2017-01-01T11-00-00Z-1min', '2017-01-01T12-00-00Z-1min', '2017-01-01T13-00-00Z-1min']
"""
date_range2 = pd.date_range(start="2017-01-01 10:00:00", end="2017-01-01 14:00:00", closed="left", freq="1h").tolist()
print(date_range2) # list
"""
[Timestamp('2017-01-01 10:00:00', freq='H'), Timestamp('2017-01-01 11:00:00', freq='H'), Timestamp('2017-01-01 12:00:00', freq='H'), Timestamp('2017-01-01 13:00:00', freq='H')]
"""
date_range3 = pd.date_range(start="2017-01-01 10:00:00", end="2017-01-01 14:00:00", closed="left", freq="1h")
date_range3_iter = date_range3.__iter__() # generator
print(isinstance(date_range3, Iterator)) # False
print(isinstance(date_range3_iter, Iterator)) # True
for i in range(date_range3.size):
range_next = date_range3_iter.next()
print(range_next) # Timestamp
"""
2017-01-01 10:00:00
2017-01-01 11:00:00
2017-01-01 12:00:00
2017-01-01 13:00:00
"""
for i in date_range3:
print(i) # Timestamp
"""
2017-01-01 10:00:00
2017-01-01 11:00:00
2017-01-01 12:00:00
2017-01-01 13:00:00
"""
end