我用的是循环(that was answered in this question)迭代打开多个csv文件,将它们转置,并将它们连接成一个大的文件框架。每个csv文件为15 mb,超过10,000行。有超过1000个文件。我发现前50个循环发生在几秒钟内,但每个循环需要一分钟。我不介意让我的电脑过夜,但我可能需要我担心这样做多次,它会指数级地变慢。有没有更有效的内存方法来做到这一点,比如将df分成50行的块,然后在最后将它们连接起来?
在下面的代码中,df是一个包含1000行的框架,其中的列表示文件夹和文件名。
merged_data = pd.DataFrame()
count = 0
for index, row in df.iterrows():
folder_name = row['File ID'].strip()
file_name = row['File Name'].strip()
file_path = os.path.join(root_path, folder_name, file_name)
file_data = pd.read_csv(file_path, names=['Case', f'{folder_name}_{file_name}'], sep='\t')
file_data_transposed = file_data.set_index('Case').T.reset_index(drop=True)
file_data_transposed.insert(loc=0, column='folder_file_id', value=str(folder_name+'_'+file_name))
merged_data = pd.concat([merged_data, file_data_transposed], axis=0, ignore_index=True)
count = count + 1
print(count)
字符串
3条答案
按热度按时间0qx6xfy61#
如果您正在处理大型数据集并希望探索并行化,您可以考虑使用Python中的
concurrent.futures
模块进行多处理。这样,每个进程可以同时处理CSV文件子集的阅读和处理。字符串
cl25kdpy2#
代码慢的原因是因为你在循环中使用了
concat
。你应该在python字典中收集数据,然后在最后执行一个concat
。只有很少的改进:
字符串
输出量:
型
输入数据:
型
多线程版本:
型
ljsrvy3e3#
检查这个代码。
字符串