如何用Pandas与for循环处理多CSV文件?解决FileNotFoundError
批量处理CSV文件报错解决方法
问题场景
需要读取24个CSV文件(命名格式为exon_kipan.00001.csv至exon_kipan.000024.csv),先执行以下单个文件的处理逻辑,再合并所有处理后的DataFrame:
df = pd.read_csv("exon_kipan.csv", sep="\t", index_col=0, low_memory=False) df = df[df.columns[::3]] df = df.T del df[df.columns[0]] df.index = df.index.str.upper() df = df.sort_index() df.index = ['-'.join(s.split('-')[:4]) for s in df.index.tolist()] df.rename_axis(None, axis=1, inplace=True)
但批量处理代码运行时出现报错,批量代码如下:
filename = '/work/exon_kipan.{}.csv' df_dict = {} exon_clin_list = [] for i in range(1, 25): df_dict[i] = pd.read_csv(filename, sep="\t", index_col=0, low_memory=False) df_dict[i] = df_dict[i][df_dict[i].columns[::3]] df_dict[i] = df_dict[i].T del df_dict[i][df_dict[i].columns[0]] df_dict[i].index = df_dict[i].index.str.upper() df_dict[i] = df_dict[i].sort_index() df_dict[i].index = ['-'.join( s.split('-')[:4]) for s in df_dict[i].index.tolist() ] df_dict[i].rename_axis(None, axis=1, inplace=True) exon_clin_list.append(df_dict[i]) exon_clin = pd.concat(df_list)
报错信息:
FileNotFoundError: [Errno 2] No such file or directory: '/work/exon_kipan.{}.csv'
错误原因
- 文件名未正确格式化:定义了带占位符的文件名模板,但没有将循环变量
i替换进去,且文件名中的数字是5位带前导零的格式(比如00001),直接用i生成的数字不符合文件名规则。 - 合并时变量名错误:最后合并用了
df_list,但实际存储处理后DataFrame的列表是exon_clin_list,变量名不匹配。 - 冗余的字典存储:用
df_dict存储每个文件的DataFrame完全没必要,直接用列表存储更简洁。
修正后的代码
import pandas as pd exon_clin_list = [] for i in range(1, 25): # 生成带前导零的5位数字文件名 filename = f'/work/exon_kipan.{i:05d}.csv' df = pd.read_csv(filename, sep="\t", index_col=0, low_memory=False) df = df[df.columns[::3]] df = df.T del df[df.columns[0]] df.index = df.index.str.upper() df = df.sort_index() df.index = ['-'.join(s.split('-')[:4]) for s in df.index.tolist()] df.rename_axis(None, axis=1, inplace=True) exon_clin_list.append(df) # 用正确的列表变量合并 exon_clin = pd.concat(exon_clin_list)
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

