首页Python【Python数据分析】5...

【Python数据分析】55.时间序列——生成时间范围


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————————————————–

pandas.date_range 根据特定频率生成具有指定长度的DateTimeIndex

 1>>> index = pd.date_range("2022-11-1" , "2022-12-1")
2>>> index
3DatetimeIndex(['2022-11-01''2022-11-02''2022-11-03''2022-11-04',
4               '2022-11-05''2022-11-06''2022-11-07''2022-11-08',
5               '2022-11-09''2022-11-10''2022-11-11''2022-11-12',
6               '2022-11-13''2022-11-14''2022-11-15''2022-11-16',
7               '2022-11-17''2022-11-18''2022-11-19''2022-11-20',
8               '2022-11-21''2022-11-22''2022-11-23''2022-11-24',
9               '2022-11-25''2022-11-26''2022-11-27''2022-11-28',
10               '2022-11-29''2022-11-30''2022-12-01'],
11              dtype='datetime64[ns]', freq='D')

默认情况下,pandas.date_range 生成的是每日的时间戳。如果只传递开始或者结束日期,则必须将一个用于生成范围的数字传递给 periods 参数:

 1>>> pd.date_range(start="2022-11-1" , periods=10)
2DatetimeIndex(['2022-11-01''2022-11-02''2022-11-03''2022-11-04',
3               '2022-11-05''2022-11-06''2022-11-07''2022-11-08',
4               '2022-11-09''2022-11-10'],
5              dtype='datetime64[ns]', freq='D')
6
7
8>>> pd.date_range(end="2022-12-1" , periods=10)
9DatetimeIndex(['2022-11-22''2022-11-23''2022-11-24''2022-11-25',
10               '2022-11-26''2022-11-27''2022-11-28''2022-11-29',
11               '2022-11-30''2022-12-01'],
12              dtype='datetime64[ns]', freq='D')

开始日期和结束日期为生成的日期索引定义了严格的界限。例如,如果您想要一个包含每个月的最后一个工作日的日期索引,可以传递“BM”频率(business end of month)到 freq 参数,并且只有日期落在日期间隔内才会被包括:

1>>> pd.date_range(start="2022-1-1" , end="2023-1-1" , freq="BM")
2DatetimeIndex(['2022-01-31''2022-02-28''2022-03-31''2022-04-29',
3               '2022-05-31''2022-06-30''2022-07-29''2022-08-31',
4               '2022-09-30''2022-10-31''2022-11-30''2022-12-30'],
5              dtype='datetime64[ns]', freq='BM')

基础时间序列频率如下所示(并非全部):

别名
偏置类型
说明
D Day 日历日的每天
B BusinessDay 工作日的每天
H Hour 每小时
T or min Minute 每分钟
S Second 每秒
L or ms Milli 毫秒(1/1,000
U Micro 每微秒(1/1,000,000
M MonthEnd 每月最后一个日历日
BM BusinessMonthEnd 每月最后一个工作日
MS MonthBegin 每月第一个日历日
BMS BusinessMonthBegin 每月第一个工作日
W-MON, W-TUE, … Week 按给定的星期日期在每周取日期(MON, TUE, WED, THU, FRI, SAT, or SUN)
WOM-1MON, WOM-2MON, … WeekOfMonth 在每月的第一、二、三、四周生成按周分隔的日期(例如,每月第三个星期五的 WOM-3FRI)
Q-JAN, Q-FEB, … QuarterEnd 每个月最后一个日历日的季度日期,以表示月份结束的年份 (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, or DEC)
BQ-JAN, BQ-FEB, … BusinessQuarterEnd 每个月最后一个工作日对应的季度日期,以表示月份结束的年份
QS-JAN, QS-FEB, … QuarterBegin 每个月第一个日历日对应的季度日期,以表示月份结束的年份
BQS-JAN, BQS-FEB, … BusinessQuarterBegin 每个月第一个工作日对应的季度日期,以表示月份结束的年份
A-JAN, A-FEB, … YearEnd  给定月份所在月的最后一个日历日所对应的年度日期(JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, or DEC)
BA-JAN, BA-FEB, … BusinessYearEnd  给定月份所在月的最后一个工作日所对应的年度日期
AS-JAN, AS-FEB, … YearBegin 给定月份所在月的第一个日历日日所对应的年度日期
BAS-JAN, BAS-FEB, … BusinessYearBegin  给定月份所在月的第一个工作日所对应的年度日期
pandas.date_range 默认保留开始或结束时间戳的时间(如果有):
1>>> pd.date_range("2022-12-12 12:12:12", periods=5)
2DatetimeIndex(['2022-12-12 12:12:12''2022-12-13 12:12:12',
3               '2022-12-14 12:12:12''2022-12-15 12:12:12',
4               '2022-12-16 12:12:12'],
5              dtype='datetime64[ns]', freq='D')

有时你会夺得一个带有时间信息的开始日期或结束日期,但希望生成一组标准化为零点的时间戳。为此,需要使用 normalize 参数:

1>>> pd.date_range("2022-12-12 12:12:12", periods=5 , normalize=True)
2DatetimeIndex(['2022-12-12''2022-12-13''2022-12-14''2022-12-15',
3               '2022-12-16'],
4              dtype='datetime64[ns]', freq='D')


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments