问题描述
我正在尝试合并 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
参数传递列名。