通过循环读取CSV文件创建Pandas DataFrame并命名变量
批量读取CSV文件为命名DataFrame的问题
我有1987年至2008年的年度数据集,每个年份的数据都是.csv格式。想通过循环把每个文件读取为Pandas DataFrame,并且用去掉CSV扩展名的文件名来命名对应的DataFrame变量,避免手动逐个加载。
我尝试了这段代码,但卡在读取DataFrame和后续调用的环节:
flight_data = [] df_lists = [] for flights_file in glob.glob("../datasets/*.csv"): flight_data.append(flights_file) df_lists.append('df_'+flights_file.split("\")[-1][:-4:])
手动加载的方式是这样的,我想替换掉这种重复操作:
df_1988 = pd.read_csv("../datasets/1988.csv") df_1990 = pd.read_csv("../datasets/1990.csv") df_1991 = pd.read_csv("../datasets/1991.csv") df_1992 = pd.read_csv("../datasets/1992.csv")
解决方案
方法1:用字典存储(推荐)
直接创建字典来管理所有DataFrame,键为目标变量名格式,值为对应DataFrame,这种方式清晰可控,便于后续调用和维护:
import pandas as pd import glob df_dict = {} for file_path in glob.glob("../datasets/*.csv"): # 提取纯文件名(移除路径和.csv后缀) file_name = file_path.split("/")[-1].removesuffix(".csv") # 生成目标键名,比如df_1987 df_key = f"df_{file_name}" # 读取文件并存入字典 df_dict[df_key] = pd.read_csv(file_path)
后续调用时直接通过字典索引获取,例如df_dict["df_1987"]即可拿到对应年份的数据集。
方法2:动态创建全局变量(不推荐)
如果一定要生成独立的全局变量,可以借助globals()函数,但这种方式容易引发变量冲突,不利于代码维护:
import pandas as pd import glob for file_path in glob.glob("../datasets/*.csv"): file_name = file_path.split("/")[-1].removesuffix(".csv") var_name = f"df_{file_name}" # 动态创建全局变量 globals()[var_name] = pd.read_csv(file_path)
运行后即可直接用df_1987、df_1988等变量名调用对应DataFrame。
问题补充说明
你之前的代码仅生成了变量名的字符串列表,但没有实际执行文件读取和DataFrame创建操作,这是导致后续调用失败的核心原因。上述两种方法均完成了读取文件+命名绑定的完整流程。
内容的提问来源于stack exchange,提问作者Yusuf Abdulganiyu
相关产品推荐
相关产品推荐

