通过选择特定列组合多个 csv 文件

问题描述

我正在尝试合并 250 多个 csv 文件,每个文件都很大,有许多行和列。我需要行,但不是每个 csv 中的所有列。因此,我不想将所有 csv 合并到一个数据帧中,而是只想使用每个 csv 中我需要的 5 列。

import os,glob

path = "path"
all_files = glob.glob(os.path.join(path,"name*.csv")
all_df = []

for f in all_files:
     df = pd.read_csv(f,sep = ',')
     df['file'] = f.split('/')[-1]
     dfout['file'] = pd.DataFrame(columns = ['A','B','C','D'])  -------> 1
     all_df.append(dfout)
merged_df = pd.concat(all_df,ignore_index = True,sort = True)

上面的代码可用于合并所有内容。我标记为“1”的那一行是唯一的添加。如何在不合并所有内容的情况下只选择上面的几列?如果我先合并然后删除不需要的列,只有合并花费了太多时间并最终停止工作(不会抛出任何错误

解决方法

您可以限制您首先阅读的列:

df = pd.read_csv(f,usecols=["A","B","C","D"]
)

然后您将只有这些列在内存中,因此稍后合并文件会更快。这假设您的文件中有一个带有命名列的标题行,否则您需要额外使用 names 参数传递列名。