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
相关产品推荐
相关产品推荐

