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

如何通过循环创建不同命名的月度筛选列表并统计分析

修正按月份筛选DataFrame并生成对应数据集的代码

原代码的问题分析

  • 循环未使用迭代变量,始终依赖固定值times=12,导致每次循环都只筛选12月的数据
  • 日期处理重复冗余,同时操作data和df两个对象,完全没必要
  • 条件判断if times <=9逻辑失效,times固定为12,永远不会进入分支
  • 未持久化每个月份的筛选结果,每次循环都会覆盖month变量

修正后的代码实现

推荐用字典存储各月份的数据集(比直接创建1、2...这类变量更易维护和遍历):

import pandas as pd

# 读取并预处理数据
excel_path = 'short data.xlsx'
df = pd.read_excel(excel_path, parse_dates=['Closed Date Time'])

# 提取日期部分(去掉时间),直接在df上操作即可
df['Close_Date'] = df['Closed Date Time'].dt.normalize()  # 等价于dt.date转datetime,更简洁

# 按月份分组存储,key是月份数字,value是对应月份的DataFrame
monthly_dfs = {}
for month_num in range(1, 13):
    # 格式化月份字符串,1-9月自动补0
    month_str = f'2018-{month_num:02d}'
    # 筛选对应月份的数据
    monthly_dfs[month_num] = df[df['Close_Date'].dt.strftime('%Y-%m') == month_str]

# 如果一定要创建名为1、2...12的变量(不推荐,字典更规范),可以用globals()
# for month_num in range(1, 13):
#     month_str = f'2018-{month_num:02d}'
#     globals()[str(month_num)] = df[df['Close_Date'].dt.strftime('%Y-%m') == month_str]

遍历计算平均值与元素长度

基于字典的遍历方式更清晰,还能避免空数据集报错:

for month_num, month_df in monthly_dfs.items():
    # 计算数据行数(元素长度)
    row_count = len(month_df)
    # 计算目标数值列的平均值,替换成你实际需要计算的列名
    avg_value = month_df['目标数值列'].mean() if row_count > 0 else 0
    
    print(f"月份{month_num}: 数据行数={row_count}, 平均值={avg_value:.2f}")

补充说明

  • 用dt.normalize()替代原有的dt.date转datetime操作,代码更简洁高效
  • 字典是Python中管理多个同类型数据集的标准方式,比动态创建变量更易维护,避免命名混乱
  • 加入空数据集判断,防止计算平均值时出现NaN或报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:15:41