合并csv文件,如果他们有相同的列标题,如果没有分割



我有一个文件夹,其中有几个csv文件(5k+),要使用它们,最好具有相同的变量名称和列数。但事实并非如此。

为了继续清理,我想创建一些子文件夹,以它们的列为条件。例如,如果两个或多个csv具有相同的列和变量名,则将它们创建为子文件夹。

到目前为止,我找到了如何组合所有文件,但我不知道在哪里将条件与匹配的列子文件夹。

import glob
import pandas as pd
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]    
col_combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames])

要合并文件夹中具有相同头文件的所有CSV文件,可以使用以下方法:

import csv
import glob
csv_files = {}      # (header as tuple) : csv.writer()
header_type_count = 1
for filename in glob.glob('*.csv'):
with open(filename, newline='') as f_input:
csv_input = csv.reader(f_input)
header = tuple(next(csv_input))

try:
csv_files[header].writerows(csv_input)
except KeyError:
f_output = open(f'header_v{header_type_count:02}.csv', 'w', newline='')
header_type_count += 1
csv_output = csv.writer(f_output)
csv_files[header] = csv_output
csv_output.writerow(header)
csv_output.writerows(csv_input)

的工作原理是跟踪所有不同的头文件类型,并允许动态地将它们连接起来。对于发现的每个新的头类型,它打开一个新的输出CSV文件(例如header_v01.csv)。

csv_files映射头类型打开csv.writer()对象允许额外的行写入。

这种方法避免了需要同时在内存中保存所有数据。

最新更新