web-dev-qa-db-ja.com

大きなxlsxファイルからpandas DataFrameをロードするためのプログレスバーを作成するにはどうすればよいですか?

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)

乱数を使用するのではなく、load_ExcelからDataFrameを作成するように、このコードを取得して編集しました。

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の代替ですか?

どんな助けでも大歓迎です。

6
user2303336

動作しないでしょう。 pd.read_Excelは、ファイルが読み取られるまでブロックします。実行中にこの関数から進行状況に関する情報を取得する方法はありません。

次のようにチャンクごとに実行できる読み取り操作で機能します

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

しかし、私が理解している限り、tqdmには事前にチャンクの数も必要であるため、適切な進捗レポートを得るには、最初にファイル全体を読み取る必要があります。

3
rocksportrocker