如何用Pandas date_range生成锚定1月/6月的半年频率日期序列?
获取指定范围内1月1日和6月1日的简便方法
你尝试的6MS-JAN之所以不行,是因为这个频率是从1月开始每6个月生成日期(即1月、7月),和你要的1月+6月的需求不匹配。这里有两种更简便的实现方式:
方法一:筛选所有月初日期
先生成起止时间内的所有月初,再过滤出1月和6月的日期,代码简洁直观:
import pandas as pd start = "2023-01-05" end = "2024-12-01" # 生成所有月初日期 all_month_starts = pd.date_range(start=start, end=end, freq="MS") # 筛选月份为1或6的日期 target_dates = all_month_starts[all_month_starts.month.isin([1, 6])] print(target_dates)
输出结果:
DatetimeIndex(['2023-06-01', '2024-01-01', '2024-06-01'], dtype='datetime64[ns]', freq=None)
方法二:分别生成1月和6月的序列再合并
如果想直接生成目标月份的序列,可以分别获取每年1月1日和6月1日的日期,再合并排序并过滤:
import pandas as pd start = "2023-01-05" end = "2024-12-01" # 生成每年1月1日的序列 jan_dates = pd.date_range(start=start, end=end, freq="AS-JAN") # 生成每年6月1日的序列 jun_dates = pd.date_range(start=start, end=end, freq="AS-JUN") # 合并、排序并过滤掉早于起始时间的日期 target_dates = pd.concat([jan_dates, jun_dates]).sort_values() target_dates = target_dates[target_dates >= start] print(target_dates)
这个方法和方法一结果一致,适合需要单独控制某类月份的场景。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

