Python 合并函数的性能问题

Python 合并函数的性能问题,python,pandas,merge,Python,Pandas,Merge,我正在使用Pandas的合并功能合并多个CSV文件,但需要3个多小时才能处理。请注意,我有超过1K个文件要合并,列可以不同,即使每个文件中的“SECURITY”列很常见,并且其值是唯一的。有什么提高性能的建议吗?我可能做错了什么或效率低下。多谢各位 def consolidate_data_files (file_names, thread_count): output_file_names = [] joined_frame = None file_count = 0 for file in

我正在使用Pandas的合并功能合并多个CSV文件,但需要3个多小时才能处理。请注意,我有超过1K个文件要合并,列可以不同,即使每个文件中的“SECURITY”列很常见,并且其值是唯一的。有什么提高性能的建议吗?我可能做错了什么或效率低下。多谢各位

def consolidate_data_files (file_names, thread_count):
output_file_names = [] 
joined_frame = None
file_count = 0
for file in file_names:
    data_frame = pandas.read_csv(str(file), quoting=csv.QUOTE_NONE, dtype=str)
    if file_count == 0:
        joined_frame = data_frame
    else:
        joined_frame = data_frame.merge(joined_frame, how='outer')
    file_count += 1
total_row_count = len(joined_frame.index) 
row_per_file = math.ceil(total_row_count/thread_count)
merged_file_count = int(math.ceil(total_row_count/row_per_file); 
for i in range(merged_file_count):
    file = "merged_file_"+str(i)+".csv"
    output_file_names.append(file)
    row_start = int(i * row_per_file)
    row_end = int(row_start + row_per_file)
    joined_frame[row_start:row_end].to_csv(path_or_buf=file, index=False, quoting=csv.QUOTE_NONE)
del joined_frame
return output_file_names 

你有没有计算过每个部分需要多长时间?这是尝试优化事物的第一部分。我能想到的另一件事是,您可能希望使用“安全性”作为索引,然后您不需要合并,但您可以只添加新的列。因此,如果您事先知道有多少行/列,您可以先创建一个带有nan值的数据框,然后填充它。我想每次合并都需要创建一个新的内存段并复制现有的数据帧,这就是slowThanks Jezzamon!我按照你的建议做了,看起来合并每个文件比合并前一个文件花费的时间更长,这似乎是主要问题。我没有将所有文件合并为一个,而是将合并的_帧推到一个数组中,然后重新创建它并继续合并。目前正在测试新方法,希望它能起作用。它像一个魅力!总体合并时间从3个多小时减少到几分钟。另外,我使用了append而不是merge,这似乎更快了。@data\u guy那么您实现的解决方案是什么?