[解決済み】pandas操作中のプログレスインジケーター
質問
1500万行を超えるデータフレームに対して定期的にpandasの操作を行いますが、特定の操作に対する進捗インジケータにアクセスできるようにしたいのですが、可能ですか?
pandasのsplit-apply-combine操作のテキストベースの進行状況インジケータは存在するのでしょうか?
例えば、こんな感じで。
df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)
ここで
feature_rollup
は、多くのDFカラムを取り、様々な方法で新しいユーザーカラムを作成する、やや複雑な関数です。 これらの操作は大きなデータフレームでは時間がかかるので、iPythonノートブックにテキストベースの出力をして、進捗状況を更新することが可能かどうか知りたいです。
これまでのところ、Pythonのカノニカルループプログレスインジケータを試しましたが、意味のある方法でpandasと相互作用することはありません。
pandasのライブラリやドキュメントに、分割・適用・結合の進捗を知ることができる何か見落としがないかと期待しています。 単純な実装では、データフレームのサブセットの総数を見ることで、そのサブセットの上に
apply
関数が動作しており、それらのサブセットの完了した割合で進捗を報告します。
これはもしかして、ライブラリに追加する必要があるのでしょうか?
どのように解決するのですか?
ご好評につき
pandas
でサポートしています。
tqdm
(
pip install "tqdm>=4.9.0"
). 他の回答とは異なり、この
は pandas の速度を著しく低下させます。
--以下はその例です。
DataFrameGroupBy.progress_apply
:
import pandas as pd
import numpy as np
from tqdm import tqdm
# from tqdm.auto import tqdm # for notebooks
# Create new `pandas` methods which use `tqdm` progress
# (can use tqdm_gui, optional kwargs, etc.)
tqdm.pandas()
df = pd.DataFrame(np.random.randint(0, int(1e8), (10000, 1000)))
# Now you can use `progress_apply` instead of `apply`
df.groupby(0).progress_apply(lambda x: x**2)
これがどのように機能するのか (そして、独自のコールバックのためにこれを修正する方法) に興味がある人のために
のサンプルをGitHubで公開しています。
は
PyPIにある完全なドキュメント
を実行するか、モジュールをインポートして
help(tqdm)
. その他にサポートされている関数は
map
,
applymap
,
aggregate
および
transform
.
EDIT
元の質問に直接答えるなら、置き換える。
df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)
を使っています。
from tqdm import tqdm
tqdm.pandas()
df_users.groupby(['userID', 'requestDate']).progress_apply(feature_rollup)
注:tqdm <= v4.8。
:
4.8未満のtqdmのバージョンでは、代わりに
tqdm.pandas()
をする必要がありました。
from tqdm import tqdm, tqdm_pandas
tqdm_pandas(tqdm())
関連
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み】PandasでSettingWithCopyWarningに対処する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み] jupyter notebookでtqdmとpandasを使うには?