如何基于数组值批量创建各年份对应的Pandas DataFrame
实现方案
不要手动逐行编写每个年份的处理逻辑,直接遍历所有年份值批量执行操作即可,完全避免重复代码,后续数据集新增年份时也无需调整代码。
最简实现可直接批量完成筛选、聚合、导出全流程:
import pandas as pd # 读取全量数据集 df_all = pd.read_csv('https://raw.githubusercontent.com/dssgPT/Plotting-Good-DSSG/main/desafios/006_Incendios/area_ardida.csv') years = df_all['year'].unique() for year in years: # 筛选当前年份数据 df_cur = df_all[df_all['year'] == year] # 按行政区、年份分组求和 df_totals_cur = df_cur.groupby(["concelho", "year"]).sum(numeric_only=True) # 按年份命名导出文件 df_totals_cur.to_csv(f'/content/drive/MyDrive/2022/DATAVIZ/dssg_{year}.csv')
补充说明
- 如果你需要在内存中暂存所有年份处理后的结果供后续调用,不要硬编码
df_2017这类独立变量,用字典统一存储管理更高效:
year_result = {} for year in years: df_cur = df_all[df_all['year'] == year] df_totals_cur = df_cur.groupby(["concelho", "year"]).sum(numeric_only=True) year_result[year] = df_totals_cur # 可同步执行导出 df_totals_cur.to_csv(f'/content/drive/MyDrive/2022/DATAVIZ/dssg_{year}.csv') # 需要取指定年份结果时直接按键索引即可,例如取2017年的聚合结果 df_2017 = year_result[2017]
- 聚合时传入
numeric_only=True是为了适配pandas 1.5+版本的规则,避免非数值列参与求和触发警告或报错。 - 如果后续需要为每个年份追加其他处理逻辑,直接在循环体内补充对应代码即可,无需重复编写数据筛选、分组的重复步骤。
内容的提问来源于stack exchange,提问作者Jorge Gomes
相关产品推荐
相关产品推荐

