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

如何通过循环遍历Python DataFrame按年份生成多个子DataFrame

如何通过循环遍历Python DataFrame按年份生成多个子DataFrame

嘿,我来帮你搞定这个问题!作为Python新手,你想通过循环按年份拆分DataFrame的思路完全没问题,但你尝试的动态命名变量写法(比如"y" + str(x) = ...)是行不通的,而且这种方式其实也不是最佳实践——后续要管理这些零散的变量会特别麻烦。我给你推荐两种可行的方案,优先选第一种哦!

方案一:用字典存储子DataFrame(强烈推荐)

用字典来存每个年份的子DataFrame是最规范的做法,不仅创建方便,后续调用、遍历处理都超级省心。

步骤1:确保Date列是datetime类型

如果你的Date列还不是datetime格式,先做转换:

import pandas as pd

# 假设你的DataFrame是df
df['Date'] = pd.to_datetime(df['Date'])

步骤2:循环生成子DataFrame并存入字典

# 定义要处理的年份列表
years = [2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023]

# 创建空字典用来存储各年份的DataFrame
year_dataframes = {}

for year in years:
    # 筛选对应年份的数据,字典的键可以用"Y2023"这种格式,方便识别
    year_dataframes[f"Y{year}"] = df[df['Date'].dt.year == year]

怎么调用子DataFrame?

比如要查看2023年的数据,直接这样写:

print(year_dataframes['Y2023'])

后续批量处理更方便

比如要把每个年份的子DataFrame保存成单独的CSV文件,直接循环字典就行:

for df_name, sub_df in year_dataframes.items():
    sub_df.to_csv(f"{df_name}.csv", index=False)

方案二:动态创建全局变量(不推荐,但满足你的需求)

如果你一定要生成Y2023、Y2022这种独立变量,可以用globals()函数,但要注意这会污染全局命名空间,后续维护起来很头疼,所以非必要不建议用:

for year in years:
    # 动态创建全局变量,变量名是Y+年份
    globals()[f"Y{year}"] = df[df['Date'].dt.year == year]

这样之后你就能直接像之前硬编码那样用Y2023、Y2022这些变量了。

处理多个文件的扩展

如果要处理多个文件,把拆分逻辑封装成函数就可以循环调用了:

def split_df_by_year(input_df, target_years):
    # 先转换日期格式
    input_df['Date'] = pd.to_datetime(input_df['Date'])
    year_dfs = {}
    for year in target_years:
        year_dfs[f"Y{year}"] = input_df[input_df['Date'].dt.year == year]
    return year_dfs

# 假设你有多个文件路径存在列表里
file_list = ["data_2007_2023.csv", "another_data.csv", ...]
# 用一个大字典存储所有文件的子DataFrame
all_year_dfs = {}

for file_path in file_list:
    # 读取文件
    current_df = pd.read_csv(file_path)
    # 拆分当前文件的DataFrame
    current_year_dfs = split_df_by_year(current_df, years)
    # 把结果存入大字典,键用"文件名_年份"区分
    file_name = file_path.split('.')[0]
    for df_name, sub_df in current_year_dfs.items():
        all_year_dfs[f"{file_name}_{df_name}"] = sub_df

备注:内容来源于stack exchange,提问作者then00b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:29:48