晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
当处理大量数据时,Pandas的性能可能会受到限制。在处理上千行和上百列的数据时,可能会遇到内存不足和执行速度慢的问题。为了优化Pandas的性能,你可以尝试以下几个方法:
-
批量处理: 一次性处理所有的CSV文件,而不是逐个读取和写入。这样可以减少IO操作的次数,提高处理效率。你可以使用多线程或并行计算库(如Dask或Joblib)来并行处理多个CSV文件。
-
适当选择数据类型: 尽量使用适当的数据类型来存储数据,以减少内存占用。例如,将数值列转换为具体的数值类型(如int、float),将字符型列转换为category类型。
-
使用chunksize参数: 如果内存不足,你可以尝试使用
chunksize
参数来分块读取CSV文件,将数据分成多个小块进行处理,然后再将结果合并。这可以减少内存的使用量。 -
使用compression参数: 如果CSV文件较大,你可以考虑使用
compression
参数来压缩输出的xlsx文件,这可以减少磁盘空间的占用。 -
避免多次写入: 你可以在内存中对数据进行处理,然后一次性写入到xlsx文件。这样可以减少写入操作的次数,提高效率。
以下是修改后的代码示例:
import os
import pandas as pd
for file_name_csv in os.listdir(Excel_csv_folder):
if file_name_csv.endswith('.csv'):
csv_file_path = os.path.join(Excel_csv_folder, file_name_csv)
xlsx_file_path = os.path.join(Excel_elsx_folder, file_name_csv.replace('.csv', '.xlsx'))
# 读取CSV文件,设定适当的数据类型
dtypes = {'Indicator Code': 'category'}
df_chunks = pd.read_csv(csv_file_path, dtype=dtypes, chunksize=1000)
writer = pd.ExcelWriter(xlsx_file_path, engine='xlsxwriter')
for i, chunk in enumerate(df_chunks):
# 在内存中对数据进行处理
chunk['Indicator Code'] = chunk['Indicator Code'].map(IDC_dict)
# 将处理后的数据写入到xlsx文件的不同sheet中
chunk.to_excel(writer, sheet_name=f'Sheet{i+1}', index=False)
writer.save()
writer.close()