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

使用Python+pandas循环读取12个CSV文件出错,求原因分析

批量读取CSV文件的for循环异常问题分析与解决

你遇到的核心问题有两个:一是直接打印Jan2016触发NameError,二是循环结束后file只保留最后一个文件的数据。下面一步步拆解问题根源和解决办法:

问题根源

你的代码存在三个关键错误:

  1. 未定义的变量i
    你的循环变量是file,但读取文件路径时写的是+ i + ".csv"——i这个变量从未被声明过,如果没修正这个问题,代码第一步就会报错。你说执行print(file)能运行,应该是后来把i改成了file,但这个细节一定要注意。

  2. 变量被重复覆盖
    循环中你每次都把读取到的DataFrame赋值给file变量,这意味着每一次循环都会把前一次的结果覆盖掉。循环跑完后,file自然只保存最后一个文件(Dec2016)的数据。

  3. 尝试访问不存在的变量
    你从来没有创建过名为Jan2016的变量!循环里只是把所有文件的数据都存在file里,并没有给每个月份单独创建对应的变量,所以直接print(Jan2016)肯定会触发“变量未定义”的错误。

解决方案

根据你的需求,有两种常用的处理方式:

方式1:用字典存储每个文件的数据(保留单独的月份数据)

这种方式可以让你通过文件名(比如'Jan2016')随时访问对应月份的DataFrame,非常方便后续单独分析:

import pandas as pd

files = ['Jan2016', 'Feb2016', 'Mar2016', 'Apr2016', 'May2016', 'Jun2016', 'Jul2016', 'Aug2016', 'Sep2016', 'Oct2016', 'Nov2016', 'Dec2016']
# 创建空字典存储每个月份的数据
monthly_data = {}

for file_name in files:
    # 用f-string拼接路径更清晰,同时把数据存入字典
    monthly_data[file_name] = pd.read_csv(f"/Volumes/Toshiba/PrescriptionData/Results2/{file_name}.csv")

# 直接通过字典键访问对应月份的数据
print(monthly_data['Jan2016'])

# 遍历所有月份的数据预览
for month, df in monthly_data.items():
    print(f"\n===== {month} 数据预览 =====")
    print(df.head())

方式2:合并所有文件为一个大DataFrame(适合整体分析)

如果你的目标是把12个月的数据合并在一起做统一分析,可以用pd.concat:

import pandas as pd

files = ['Jan2016', 'Feb2016', 'Mar2016', 'Apr2016', 'May2016', 'Jun2016', 'Jul2016', 'Aug2016', 'Sep2016', 'Oct2016', 'Nov2016', 'Dec2016']
# 创建空列表存储每个月份的DataFrame
df_list = []

for file_name in files:
    df = pd.read_csv(f"/Volumes/Toshiba/PrescriptionData/Results2/{file_name}.csv")
    # 添加月份标记列,方便后续筛选分析
    df['month'] = file_name
    df_list.append(df)

# 合并所有DataFrame为一个大表
combined_df = pd.concat(df_list, ignore_index=True)

# 查看合并后的数据
print(combined_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:48:31