Как быстрее работать с большими таблицами Excel в Python

Russkie Vpered

Новичок
Пользователь
Апр 27, 2020
2
0
1
1.Операционная система Windows 7 (x64)
2.Версия Python 3.7
Есть большая таблица (50К наблюдений) в Excel с показаниями работы датчиков. Мне необходимо брать из нее некоторые выборки, когда я пытаюсь это сделать, Python выполняет запрос очень долго.
Вот мой код:
Python:
import xlrd

data_file=xlrd.open_workbook('2009-блок4.xlsx')
sheet=data_file.sheet_by_index(0)

test_massive=[]
row_number=100

if row_number>0:
    for row in range(0,row_number):
        test_massive.append(str(sheet.row(row)[0]).replace("number:",""))      
       
for i in range(0,len(test_massive)):
    test_massive[i]=float(test_massive[i])
   
print(test_massive)

 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
Быстрее работать с модулем openpyxl
Он может не читать весь файл, а делать это по указателям.
 

Russkie Vpered

Новичок
Пользователь
Апр 27, 2020
2
0
1
Быстрее работать с модулем openpyxl
Он может не читать весь файл, а делать это по указателям.
Попытался вывести некоторые выборки из excel-файла и сделать простейшие операции с данными, добавляю всего лишь 1000 значений в массив, но из конца документа, время результата очень большое:
Python:
import openpyxl as opx
import numpy as np
wb=opx.load_workbook('2009-блок4.xlsx',read_only=True)
first_sheet = wb.worksheets[0]

sample=[]

for row in first_sheet[20000:21000]:
    sample.append(row[95].value)     #row[95].value-значение в текущей ячейке 95 стобца
if sample[0]>sample[800]:
    print(sample[0])
else:
    print(sample[800])
Единственная мысль-это работать не с простыми массивами, а с numpy-массивами, но получаю ошибку
Вот код:
Код:
import openpyxl as opx
import numpy as np
wb=opx.load_workbook('2009-блок4.xlsx',read_only=True)
first_sheet = wb.worksheets[0]

sample=[]
np_array=np.array(sample)

for row in first_sheet[50:1050]:
    np.append(np_array,row[95].value)     
if sample[0]>sample[800]:
    print(sample[0])
else:
    print(sample[800])
Вот ошибка:
if sample[0]>sample[800]: IndexError: list index out of range
Что то подсказывает, что numpy массивы не сильно дадут выигрыш во времени, не подскажете, что я делаю не так и как можно оптимизировать вычисления?
 

Форум IT Специалистов