refrain_ct 2024-04-02 22:47 采纳率: 33.3%
浏览 123

python用pandas库写入xlsx文件时速度过慢如何优化

本人在校学生 自学不太明白 经过本人不严谨测试发现问题出在df.to_excel这里 因为写入的数据大概在90+列 50w+行 导致一直卡在这里 具体多久跑完不知道(跑了几十分钟没跑完)并且16g内存爆满
有没有可以提升处理效率的方法
感激不尽

img


for file_name_csv in os.listdir(Excel_csv_folder):
    if file_name_csv.endswith('.csv'):
        df = pd.read_csv(os.path.join(Excel_csv_folder, file_name_csv))
        xlsx_filename = file_name_csv.replace('.csv', '.xlsx')
        df.to_excel(os.path.join(Excel_elsx_folder, xlsx_filename), index=False)
for file_name in os.listdir(Excel_elsx_folder):
    if file_name.endswith('.xlsx'):
        excel_file_path =os.path.join(Excel_elsx_folder,file_name)
        # 读取Excel文件
        df = pd.read_xlsx(excel_file_path)
        # 遍历B列的每一行元素,匹配字典中的值,并将对应的键写入A列相同的行
        for index, row in df.iterrows():
            # 获取B列的元素值
            value_in_D = row['Indicator Code']
            # 在字典中查找匹配的键
            corresponding_key_IDC = IDC_dict.get(value_in_D)
            if corresponding_key_IDC != None:
                df.at[index,'Indicator Code'] = corresponding_key_IDC
        # 将修改后的DataFrame写回Excel文件
        df.to_xlsx(excel_file_path, index=False)

  • 写回答

2条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    当处理大量数据时,Pandas的性能可能会受到限制。在处理上千行和上百列的数据时,可能会遇到内存不足和执行速度慢的问题。为了优化Pandas的性能,你可以尝试以下几个方法:

    1. 批量处理: 一次性处理所有的CSV文件,而不是逐个读取和写入。这样可以减少IO操作的次数,提高处理效率。你可以使用多线程或并行计算库(如Dask或Joblib)来并行处理多个CSV文件。

    2. 适当选择数据类型: 尽量使用适当的数据类型来存储数据,以减少内存占用。例如,将数值列转换为具体的数值类型(如int、float),将字符型列转换为category类型。

    3. 使用chunksize参数: 如果内存不足,你可以尝试使用chunksize参数来分块读取CSV文件,将数据分成多个小块进行处理,然后再将结果合并。这可以减少内存的使用量。

    4. 使用compression参数: 如果CSV文件较大,你可以考虑使用compression参数来压缩输出的xlsx文件,这可以减少磁盘空间的占用。

    5. 避免多次写入: 你可以在内存中对数据进行处理,然后一次性写入到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()
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月2日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见