我有一个文件夹,其中有几个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()
对象允许额外的行写入。
这种方法避免了需要同时在内存中保存所有数据。