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

Python如何读取run_years中年份文件夹下的多个CSV文件?

问题解决与最优实现方案

第一步:修复read函数的语法与逻辑问题

原函数存在语法错误、路径拼接不规范等问题,先修正为健壮性更强的版本:

import pandas as pd
import os

def read(year, working_dir):
    # 用os.path.join自动适配不同系统的路径分隔符,避免拼接错误
    file_path = os.path.join(working_dir, str(year), "mycsv.csv")
    # 修正DataFrame的大小写拼写,补全read_csv的闭合括号
    df = pd.DataFrame(pd.read_csv(file_path))
    return df

说明:把working_dir作为参数传入函数,让函数更通用;用str(year)确保年份无论数字还是字符串类型,都能正常参与路径拼接。

第二步:正确遍历字典run_years并批量读取文件

你提到年份存在字典run_years中,需根据字典的存储逻辑选择遍历方式,以下是两种常见场景的最优实现:

场景1:字典的键是年份(如{"2020": "销售数据", "2021": "销售数据"})

用字典推导式批量读取并存储每个年份的DataFrame,方便后续调用:

# 替换为你的实际工作目录
working_dir = "D:/data_files"
# 示例年份字典
run_years = {"2020": "销售数据", "2021": "销售数据", "2022": "销售数据"}

# 批量读取,结果为{年份: 对应DataFrame}的字典
year_data_dict = {year: read(year, working_dir) for year in run_years.keys()}

场景2:字典的值是年份(如{"data1": 2020, "data2": 2021})

只需遍历字典的值即可:

year_data_dict = {year: read(year, working_dir) for year in run_years.values()}

原循环出错的原因

你的代码存在三个核心问题:

  • for x in run_years语句末尾缺少冒号,不符合Python语法
  • 循环内run_years = x会覆盖原字典,导致循环逻辑直接中断
  • 若年份是数字类型,直接和字符串拼接会触发TypeError,必须先转为字符串

进阶优化:合并所有年份数据(可选)

如果需要将所有年份的DataFrame合并为一张大表,可在批量读取后执行:

# 方式1:保留年份作为层级索引
combined_df = pd.concat(year_data_dict.values(), keys=year_data_dict.keys(), names=["year", "original_index"])

# 方式2:添加单独的year列后合并
combined_df = pd.concat(
    [df.assign(year=year) for year, df in year_data_dict.items()],
    ignore_index=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:35:30