Как увеличить скорость процесса, используя read_excel в пандах? - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно использовать pd.read_excel для обработки каждого листа в одном файле Excel.
Но в большинстве случаев я не знал названия листа.
Поэтому я использую это, чтобы определить, какмного листов в excel:

i_sheet_count=0
i=0
try:
  df.read_excel('/tmp/1.xlsx',sheetname=i)
  i_sheet_count+=1
  i+=1
else:
  i+=1
print(i_sheet_count)

В ходе процесса я обнаружил, что процесс довольно медленный,
Итак, может ли read_excel только читать ограниченные строки, чтобы повысить скорость?
Я пытался nrows , но не работал .. все еще медленно ..

1 Ответ

0 голосов
/ 05 июня 2018

Прочитать все листы, не угадывая

Используйте аргумент sheetname = None для pd.read_excel.Это прочитает все рабочих листов в словарь данных.Например:

dfs = pd.read_excel('file.xlsx', sheetname=None)

# access 'Sheet1' worksheet
res = dfs['Sheet1']

Ограничить количество строк или столбцов

Вы можете использовать parse_cols и skip_footer аргументы, чтобы ограничить количество столбцов и / или строк.Это сократит время чтения, а также будет работать с sheetname = None.

Например, следующее будет читать первые 3 столбца и, если ваш рабочий лист содержит 100 строк, он будет читать только первые 20.

df = pd.read_excel('file.xlsx', sheetname=None, parse_cols='A:C', skip_footer=80)

Если вы хотите применить логику, специфичную для рабочего листа, вы можете сделать это, извлекая имена листов:

sheet_names = pd.ExcelFile('file.xlsx', on_demand=True).sheet_names

dfs = {}
for sheet in sheet_names:
    dfs[sheet] = pd.read_excel('file.xlsx', sheet)

Повышение производительности

Чтение файлов Excel в Pandas естественно медленнеечем другие варианты (CSV, Pickle, HDF5).Если вы хотите повысить производительность, я настоятельно рекомендую вам рассмотреть эти другие форматы.

Один из вариантов, например, состоит в том, чтобы использовать сценарий VBA для преобразования ваших рабочих таблиц Excel в файлы CSV;затем используйте pd.read_csv.

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