Python: загрузить заголовок Excel без загрузки оставшихся данных - PullRequest
1 голос
/ 17 июня 2020

Я работаю с очень большими файлами Excel, которые долго загружаются с Pandas в Python. Перед обработкой данных пользователь должен выбрать несколько параметров, связанных с данными, для которых требуются только имена каждого столбца в каждом наборе данных. Пользователю очень неудобно ждать иногда минуты, пока данные будут загружены, чтобы иметь возможность выбрать необходимые параметры, а затем позволить программе выполнить фактическую обработку еще несколько минут.

Итак, мой вопрос is: есть ли способ загрузить только заголовок данных из файла Excel с Python? В некотором смысле я думаю об этом как об альтернативной версии параметра skiprows в функции read_excel Pandas, где вместо пропуска строк в начале данных я хотел бы пропускать строки в конец данных. Я хочу подчеркнуть, что моя цель - сократить время Python, необходимое для загрузки файлов. Я также знаю, что есть способы сделать это с файлами csv , но, к сожалению, мне это не помогло.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Можно попробовать использовать модуль sxl (https://pypi.org/project/sxl/). Вот код, который я пробовал для большого файла excel (около 75000 строк), и результаты синхронизации:

from datetime import datetime
startTime = datetime.now()
import pandas as pd
import sxl


startTime = datetime.now()
df = pd.read_excel('\\Big_Excel.xlsx')
print("Time taken to load whole data with pandas read excel is {}".format((datetime.now() - startTime)))


startTime = datetime.now()
df = pd.read_excel('\\Big_Excel.xlsx', nrows = 5)
print("Time taken with top 5 rows with pandas read excel is {}".format((datetime.now() - startTime)))


startTime = datetime.now()
wb = sxl.Workbook('\\Big_Excel.xlsx')
ws = wb.sheets[1]
data = ws.head(5)
print("Time taken to load top 5 rows using sxl is {}".format((datetime.now() - startTime)))

Pandas read excel загружает все данные в память, поэтому нет большой разницы разница во времени. Вот результаты вышеизложенного:

  • Время, затраченное на загрузку всех данных с помощью pandas read excel, составляет 0:00: 49.174538
  • Время, затраченное на 5 верхних строк с pandas read excel: 0: 00: 44.478523
  • Время, затраченное на загрузку верхних 5 строк с помощью sxl, составляет 0: 00: 00.671717

Надеюсь, это поможет !!

0 голосов
/ 17 июня 2020

Вы можете использовать параметр 'skipfooter' или 'nrows' как в .xlsx, так и .csv. Однако их нельзя использовать вместе.

path = r'c:\users\abc\def\stack.xlsx'
df = pd.read_excel(path, skipfooter = 99999)

это означает, что 99999 строк будут пропущены от нижнего колонтитула до верха, а остальные записи из заголовка будут загружены.

path = r'c:\users\abc\def\stack.xlsx'
df = pd.read_excel(path, nrows= 5)

что означает, что сначала 5 строк будут показаны с заголовком.

Также см. Этот Вопрос о переполнении стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...