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

如何通过for循环结合pd.read_csv创建与CSV文件同名的DataFrame

问题说明

初始测试代码如下,作用是遍历打印指定目录下的所有文件:

import pandas as pd
import os
path=r"C:\Users\berid\OneDrive\Desktop\mydata\covid19 South Korea\\"
for file in os.listdir(path):
    print(file)

代码运行输出如下:
目录文件列表输出
目录中存放了韩国新冠疫情相关的多个CSV数据文件,目标是批量读取目录下所有CSV文件,为每个文件生成独立的DataFrame,且DataFrame的变量名与文件去掉.csv后缀的主名完全一致,例如Case.csv对应变量名Case、PatientInfo.csv对应变量名PatientInfo。

之前的错误实现代码如下:

for file in os.listdir(path):
    name=file.split(".csv")[0]
    name=pd.read_csv(path+file)

该写法的问题是循环过程中反复对同一个变量name赋值,循环结束后仅会保留最后一个读取到的DataFrame,无法动态生成不同名称的变量。

实现方法

方法1:字典统一存储(优先推荐)

这是最规范的实现方式,将所有DataFrame存入字典,以文件主名为键、对应DataFrame为值,不会污染全局命名空间,也能避免变量名冲突问题:

import pandas as pd
import os

path = r"C:\Users\berid\OneDrive\Desktop\mydata\covid19 South Korea\\"
df_collection = {}

for file in os.listdir(path):
    # 过滤非CSV文件,避免读取报错
    if file.lower().endswith(".csv"):
        df_name = file.removesuffix(".csv")
        # 用os.path.join拼接路径兼容性比字符串直接拼接更好
        df_collection[df_name] = pd.read_csv(os.path.join(path, file))

使用时直接通过键访问对应DataFrame即可,例如要调用Case的数据,直接写df_collection['Case']。如果需要查看所有读取到的数据集基本信息,可以执行以下代码:

for df_name, df in df_collection.items():
    print(f"===== 数据集:{df_name} =====")
    print(f"行数:{df.shape[0]},列数:{df.shape[1]}")
    print(df.head(), "\n")

方法2:动态注册全局变量

如果确实需要生成和文件名同名的独立全局变量,可以通过globals()修改全局命名空间实现,注意如果目录下文件名和已有变量重名,会覆盖原有变量内容:

import pandas as pd
import os

path = r"C:\Users\berid\OneDrive\Desktop\mydata\covid19 South Korea\\"

for file in os.listdir(path):
    if file.lower().endswith(".csv"):
        df_name = file.removesuffix(".csv")
        globals()[df_name] = pd.read_csv(os.path.join(path, file))

代码运行完成后,就可以直接通过Case、PatientInfo、Policy这类变量名直接访问对应数据集。

小提示:str.removesuffix('.csv')是Python 3.9+支持的方法,如果使用更低版本的Python,可以替换为file[:-4]来去掉末尾的4个字符(即.csv后缀)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:48:24