如何从文件夹中的CSV文件动态创建对应名称的DataFrame变量?
动态创建DataFrame变量及更优方案
一、实现动态创建同名变量(满足你的需求)
你的代码存在两处关键问题:
count计算的是文件夹下所有文件的数量,而非仅CSV文件,循环时会出现索引越界- 直接用
print(Map1.csv)不符合Python语法,变量名包含.时需通过globals()引用,或者调整变量名去掉后缀
修正后的代码
方案1:保留完整文件名(含.csv)作为变量名
import pandas as pd from tkinter.filedialog import askdirectory import glob import os path = askdirectory(title='选择文件夹') csv_files = glob.glob(os.path.join(path, "*.csv")) for file_path in csv_files: file_name = os.path.basename(file_path) globals()[file_name] = pd.read_csv(file_path) # 验证输出 print(globals()['map1.csv'])
方案2:去掉.csv后缀作为变量名(更符合Python命名习惯)
import pandas as pd from tkinter.filedialog import askdirectory import glob import os path = askdirectory(title='选择文件夹') csv_files = glob.glob(os.path.join(path, "*.csv")) for file_path in csv_files: # 提取无后缀的文件名 file_name = os.path.splitext(os.path.basename(file_path))[0] globals()[file_name] = pd.read_csv(file_path) # 验证输出 print(map1)
二、更优实践:用字典统一存储DataFrame
动态创建全局变量会污染命名空间,后续难以批量管理数据,推荐用字典存储所有DataFrame:
import pandas as pd from tkinter.filedialog import askdirectory import glob import os path = askdirectory(title='选择文件夹') csv_files = glob.glob(os.path.join(path, "*.csv")) df_dict = {} for file_path in csv_files: # 可选:用带后缀的文件名当键,或去掉后缀 file_name = os.path.splitext(os.path.basename(file_path))[0] df_dict[file_name] = pd.read_csv(file_path) # 访问单个DataFrame print(df_dict['map1']) # 批量操作示例:遍历输出所有DataFrame的前5行 for name, df in df_dict.items(): print(f"===== {name} 的前5行 =====") print(df.head())
这种方式的优势:
- 避免全局命名空间混乱,变量更易追踪
- 支持批量处理所有导入的数据(比如统一清洗、导出)
- 可通过键名快速定位指定的DataFrame
内容的提问来源于stack exchange,提问作者Carst Hoopman
相关产品推荐
相关产品推荐

