date_range函数生成日期序列的方法
在日常编程中,经常需要使用日期序列对数据进行处理和分析。Python中有很多处理日期序列的工具,其中一个常用的函数是date_range()。本文将介绍date_range()函数的生成日期序列的方法。
date_range()函数是pandas库的一个函数,用于生成日期序列。该函数的语法如下:
pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
其中各参数的含义如下:
- start:日期序列的起始日期,可以是一个字符串、datetime类型、Timestamp类型或其他可转换为DatetimeIndex类型的对象。默认值为None,表示从周期中的起始日期开始。
- end:日期序列的结束日期,类型与start相同。默认值为None,表示从起始日期的n个周期(periods)后结束。
- periods:生成的日期序列长度。可以是整数、Timedelta或None。如果是None,则必须提供start和end参数中的一个。如果start和end都是None,则必须通过periods提供日期序列长度。
- freq:日期序列的频率设置,可以是D(日)、H(小时)、M(月)、A(年)等。默认值为D(日)。
- tz:时区设置,可以是一个字符串或None。如果是None,则表示使用本地时区。例如‘Asia/Shanghai’表示使用北京时间。默认值为None。
- normalize:是否将生成的日期序列中的时间部分全部设置为0。默认值为False。
- name:设置DatetimeIndex的名称。默认值为None。
- closed:日期序列的左闭合/右闭合设置,可以是None、‘left’、‘right’。在日期序列的左端点和右端点是包含在序列中还是排除在外。默认值为None。
下面分别介绍date_range()的各参数的使用方法。
1.生成连续日期序列
可以使用start和end参数,指定日期序列的开始和结束日期。例如:
import pandas as pd start_date = '2020-01-01' end_date = '2020-01-10' date_range = pd.date_range(start=start_date, end=end_date) print(date_range)
运行结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10'],
dtype='datetime64[ns]', freq='D')
经过测试,start参数可以不写,如果不写start,则默认以end所在周期向前推periods-1个周期作为日期范围的起始日期。
2.生成指定长度日期序列
如果需要生成指定长度的日期序列,可以使用periods参数。例如:
import pandas as pd start_date = '2020-01-01' date_range = pd.date_range(start=start_date, periods=10) print(date_range)
运行结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10'],
dtype='datetime64[ns]', freq='D')
3.设定频率
如果需要设定日期序列的频率,可以使用freq参数。例如:
import pandas as pd start_date = '2020-01-01' date_range = pd.date_range(start=start_date, periods=10, freq='2D') print(date_range)
运行结果:
DatetimeIndex(['2020-01-01', '2020-01-03', '2020-01-05', '2020-01-07',
'2020-01-09', '2020-01-11', '2020-01-13', '2020-01-15',
'2020-01-17', '2020-01-19'],
dtype='datetime64[ns]', freq='2D')
可以看到,日期序列的频率以2天为间隔,并且序列中的日期仅会出现奇数日或偶数日。
4.设定时区
如果需要将日期序列的时区统一设置为某个时区,可以使用tz参数。例如:
import pandas as pd start_date = '2020-01-01' date_range = pd.date_range(start=start_date, periods=10, tz='Asia/Shanghai') print(date_range)
运行结果:
DatetimeIndex(['2020-01-01 00:00:00+08:00', '2020-01-02 00:00:00+08:00',
'2020-01-03 00:00:00+08:00', '2020-01-04 00:00:00+08:00',
'2020-01-05 00:00:00+08:00', '2020-01-06 00:00:00+08:00',
'2020-01-07 00:00:00+08:00', '2020-01-08 00:00:00+08:00',
'2020-01-09 00:00:00+08:00', '2020-01-10 00:00:00+08:00'],
dtype='datetime64[ns, Asia/Shanghai]', freq='D')
设定时区后,日期序列的日期会以指定时区的格式输出。
5.设定日期部分的格式
如果需要统一设定日期序列的时间部分(如小时、分钟、秒等)为0,可以使用normalize参数。例如:
import pandas as pd start_date = '2020-01-01 10:15:30' date_range = pd.date_range(start=start_date, periods=10, normalize=True) print(date_range)
运行结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10'],
dtype='datetime64[ns]', freq='D')
可以看到,日期序列中的时间部分已被统一设定为0。
6.设定DatetimeIndex名称
如果将日期序列作为pandas DataFrame的索引,可以使用name参数为DatetimeIndex设置名称。例如:
import pandas as pd
start_date = '2020-01-01'
date_range = pd.date_range(start=start_date, periods=10, name='mydates')
df = pd.DataFrame({'A': list(range(10))}, index=date_range)
print(df)
运行结果:
A
mydates
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
2020-01-06 5
2020-01-07 6
2020-01-08 7
2020-01-09 8
2020-01-10 9
日期序列的名称已被设置为‘mydates’。
7.设定日期序列左闭合/右闭合
如果需要设定日期序列的左闭合或右闭合,可以使用closed参数。例如:
import pandas as pd start_date = '2020-01-01' date_range = pd.date_range(start=start_date, periods=10, closed='left') print(date_range)
运行结果:
`
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-
