Как обработать ошибку памяти в больших файлах Excel - PullRequest
0 голосов
/ 27 апреля 2020

# моя задача - прочитать этот файл, создать сводную таблицу, поэтому при чтении файла на основе имени столбца у меня появляется ошибка памяти, есть способ ее обработать

import os
    import xlrd
    import pandas as pd
    import openpyxl as xl
    ##get current directory
    cwd= os.getcwd()
    print("This script is to update")
    print("Starting to populate the Data Validation File")
    filename_1 =[os.path.join(root, f) for root, _, files in os.walk(os.getcwd())
                           for f in files
                           if f.startswith('1') and f.endswith('.xlsx')]
    filename_1=filename_1[0]

    book_1 = xl.load_workbook(filename_1)
    ws = book_1["J"]
    print("Loaded the filename:")
    for filename in os.listdir(cwd):
        if filename.endswith('.xlsx') and filename.startswith(('Seeep_')):
            book = pd.ExcelFile(filename)
            for sheet in book.sheet_names:
   here i am i am getting the memory error how to handle this the file is really big**


    df = book.parse(sheet)
                if 'comp' in df.columns:
                    df.columns = df.columns.str.replace(' ', '')
                    df['comp1']=df['com']
                    print("For "+filename+"\n"+" Creating the Pivot Table")
                    book2=df[(df.Iy!='SE')].pivot_table(values='comp',index=['os','sv'], columns='comp', aggfunc='count',margins=True)
                    print(book2)
                    book3=df.pivot_table(values='compl',index=['Ring','os','sv'], columns='comp', aggfunc='count',margins=True)

1 Ответ

0 голосов
/ 27 апреля 2020

Я бы предложил:

  1. Преобразование листов Excel в отдельные файлы CSV. Например, используйте https://openpyxl.readthedocs.io/en/stable/optimized.html#read -only-mode для итерации по строкам и записи их в CSV с использованием Python API записи CSV https://docs.python.org/3/library/csv.html#csv .writer

  2. Затем используйте Pandas для загрузки CSV, убедитесь, что загружаются только те столбцы, которые вам действительно нужны, и установите типы столбцов, чтобы использовать меньше памяти. https://pythonspeed.com/articles/pandas-load-less-data/ описывает, как это сделать.

...