Как сделать индикатор выполнения для загрузки панд DataFrame из большого файла xlsx? - PullRequest
0 голосов
/ 06 сентября 2018

из https://pypi.org/project/tqdm/:

import pandas as pd
import numpy as np
from tqdm import tqdm

df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))
tqdm.pandas(desc="my bar!")p`
df.progress_apply(lambda x: x**2)

Я взял этот код и отредактировал его так, чтобы создать DataFrame из load_excel вместо использования случайных чисел:

import pandas as pd
from tqdm import tqdm
import numpy as np

filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x**2)

Это дало мнеошибка, поэтому я изменил df.progress_apply на это:

df.progress_apply(lambda x: x)

Вот окончательный код:

import pandas as pd
from tqdm import tqdm
import numpy as np

filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x)

В результате отображается индикатор выполнения, но на самом деле он не отображается.прогресс, скорее, он загружает панель, и когда операция завершается, она переходит на 100%, побеждая цель.

У меня такой вопрос: как мне заставить работать индикатор выполнения?
Что делаетфункцию внутри progress_apply на самом деле делать?
Есть ли лучший подход?Может быть альтернатива tqdm?

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 06 сентября 2018

не будет работать. pd.read_excel блокируется до тех пор, пока файл не будет прочитан, и у этой функции нет способа получить информацию о ее ходе во время выполнения.

Это сработало бы для операций чтения, которые вы можете выполнять по частям, например

chunks = []
for chunk in pd.read_csv(..., chunksize=1000):
    update_progressbar()
    chunks.append(chunk)

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

...