You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按特殊条件生成日期与年份列表?

自动生成日期列表及对应年份的解决方案

可以按照以下步骤实现自动生成符合要求的日期和年份列表,无需手动维护:

1. 生成并处理日期与年份

利用Pandas的date_range生成每月第一天的日期序列,再根据规则处理对应年份:

import pandas as pd

# 定义时间范围(使用标准日期格式更稳妥)
start_date = '2022-02-01'
end_date = '2022-07-01'

# 生成每月第一天的日期序列,freq='MS'代表Month Start(月初)
date_range = pd.date_range(start=start_date, end=end_date, freq='MS')

# 格式化日期并生成对应年份列表
formatted_dates = []
corresponding_years = []

for date in date_range:
    # 将日期格式化为你需要的'01Jan2022'样式,转大写确保月份缩写符合示例
    formatted_date = date.strftime('%d%b%Y').upper()
    formatted_dates.append(formatted_date)
    
    # 处理年份规则:1月对应上一年,其余月份对应当年
    if date.month == 1:
        year_str = str(date.year - 1)
    else:
        year_str = str(date.year)
    corresponding_years.append(year_str)

# 将日期和年份配对,避免索引错位
date_year_pairs = list(zip(formatted_dates, corresponding_years))

2. 修改循环脚本适配自动生成的列表

修正你原代码中的参数缺失和函数名错误,遍历配对后的日期与年份:

Query = """select distinct A.name, count(A.number)
           from A, B
           where Date between A.Opendate and A.Enddate
           and B.Status='Y'
           Group by A.name"""

def summary(Date, Year, Query):
    try:
        cur = conn()
        cur.execute(Query, {'Date': Date, 'Year':Year})
        df = pd.DataFrame(cur.fetchall())
        df.columns = [x[0] for x in cur.description]
        return df  # 注意原代码里Return是大写,需改为小写return
    finally:
        cur.close()  # 建议添加关闭游标,避免数据库资源泄漏

# 初始化空DataFrame用于拼接结果
final_df = pd.DataFrame()

# 遍历所有日期-年份对,批量生成结果
for date, year in date_year_pairs:
    temp_df = summary(date, year, Query)
    final_df = pd.concat([final_df, temp_df], axis=0, ignore_index=True)  # ignore_index避免索引重复

关键说明

  • pd.date_range(freq='MS')会直接生成指定时间段内每月第一天的datetime对象,无需手动构造日期。
  • 通过date.month判断是否为1月,自动计算对应年份,彻底避免手动处理特殊情况。
  • 用zip将日期和年份配对,确保循环时二者始终一一对应,不会出现索引错位问题。
  • 原代码中的Return要改为小写return,同时建议添加游标关闭逻辑,防止数据库连接资源泄漏。

内容的提问来源于stack exchange,提问作者user20159866

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:25:23