读取本地CSV文件时动态命名Pandas DataFrame重复问题求助
问题分析与解决方法
问题根源
原代码有两个核心问题:
- 嵌套循环逻辑错误:外层遍历每个CSV文件时,内层又遍历所有预期的DataFrame名称,导致每个文件都会覆盖所有名称对应的变量,最终所有变量都指向最后一个读取的CSV内容。
- 变量赋值方式错误:循环里直接给
name变量赋值,只是修改了循环变量的引用,并没有真正创建你想要的fifa_15、fifa_16这类独立变量。
正确实现方式
方式一:用字典存储(推荐)
用字典映射文件名和对应的DataFrame,管理起来更清晰,还能避免变量名混乱:
import pandas as pd from glob import glob files = glob('*.csv') # 先给文件排序,保证和年份顺序对应(glob返回的文件顺序不一定是按年份排的) files.sort() df_dict = {} # 按顺序配对文件和年份 for file, year in zip(files, range(15, 23)): df_name = f'fifa_{year}' df_dict[df_name] = pd.read_csv(file) # 访问示例:df_dict['fifa_15']、df_dict['fifa_16']
方式二:动态创建独立变量(不推荐)
如果一定要生成fifa_15这类独立变量,可以通过globals()实现:
import pandas as pd from glob import glob files = glob('*.csv') files.sort() for file, year in zip(files, range(15, 23)): df_name = f'fifa_{year}' globals()[df_name] = pd.read_csv(file) # 现在可以直接用fifa_15、fifa_16这些变量
注意事项
- 必须给
files排序,不然glob返回的文件顺序可能乱掉,导致DataFrame和年份不匹配。 - 优先选字典存储的方式,动态创建变量会污染命名空间,文件多了之后很难维护。
内容的提问来源于stack exchange,提问作者mmahmed79
相关产品推荐
相关产品推荐

