表形式データで Pandas を使用したことがある場合は、データをインポートし、クリーンアップして変換し、それをモデルへの入力として使用するプロセスに精通しているかもしれません。ただし、コードをスケールして運用環境に導入する必要がある場合、Pandas パイプラインがクラッシュし始め、動作が遅くなる可能性が高くなります。この記事では、Pandas コードの実行を高速化し、データ処理の効率を向上させ、よくある落とし穴を回避するのに役立つ 2 つのヒントを紹介します。
ヒント 1: ベクトル化操作
Pandas では、ベクトル化操作は、ボックスの列を使用せずに、より簡潔な方法でデータ全体を処理できる効率的なツールです。行ごとにループします。
それはどのように機能しますか?
ブロードキャストはベクトル化操作の重要な要素であり、これによりさまざまな形状のオブジェクトを直感的に操作できるようになります。
例 1: 3 つの要素を持つ配列 a にスカラー b を乗算すると、ソースと同じ形状の配列が得られます。
例 2: 加算演算を実行する場合、形状 (4,1) の配列 a と形状 (3,) の配列 b を加算すると、結果は次の配列になります。形状 (4,3)。
これについては、特に大規模な行列の乗算が一般的な深層学習において、多くの記事で議論されています。この記事では 2 つの簡単な例について説明します。
まず、特定の整数が列に出現する回数を数えたいとします。考えられる方法は 2 つあります。
"""计算DataFrame X 中 "column_1" 列中等于目标值 target 的元素个数。参数:X: DataFrame,包含要计算的列 "column_1"。target: int,目标值。返回值:int,等于目标值 target 的元素个数。"""# 使用循环计数def count_loop(X, target: int) -> int:return sum(x == target for x in X["column_1"])# 使用矢量化操作计数def count_vectorized(X, target: int) -> int:return (X["column_1"] == target).sum()
次に、日付列を含む DataFrame があり、それを指定された日数だけオフセットしたいとします。ベクトル化された演算を使用した計算は次のとおりです。
def offset_loop(X, days: int) -> pd.DataFrame:d = pd.Timedelta(days=days)X["column_const"] = [x + d for x in X["column_10"]]return Xdef offset_vectorized(X, days: int) -> pd.DataFrame:X["column_const"] = X["column_10"] + pd.Timedelta(days=days)return X
ヒント 2: 反復
「for ループ」
反復を行う最初の最も直感的な方法は、Python for を使用することです。ループ。
def loop(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:res = []i_remove_col = df.columns.get_loc(remove_col)i_words_to_remove_col = df.columns.get_loc(words_to_remove_col)for i_row in range(df.shape[0]):res.append(remove_words(df.iat[i_row, i_remove_col], df.iat[i_row, i_words_to_remove_col]))return result
「apply」
def apply(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return df.apply(func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1).tolist()
df.apply の各反復で、提供された呼び出し可能関数は、インデックスが df.columns で値が行である Series を取得します。これは、パンダがループごとにシーケンスを生成する必要があり、コストがかかることを意味します。コストを削減するには、次のように、使用することがわかっている df のサブセットに対して apply を呼び出すことをお勧めします。
def apply_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return df[[remove_col, words_to_remove_col]].apply(func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1)
「リストの組み合わせ itertuples」
リストと組み合わせた itertuples を使用した反復は、確実に実行されます。より良く働きます。 itertuples は、行データを含む (名前付き) タプルを生成します。
def itertuples_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x[0], x[1])for x in df[[remove_col, words_to_remove_col]].itertuples(index=False, name=None)]
「リストの組み合わせ zip」
zip は反復可能オブジェクトを受け取り、タプルを生成します。i 番目のタプルには、指定された反復可能オブジェクトの i 番目の要素がすべて順番に含まれます。
def zip_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]
「リストの組み合わせ to_dict」
def to_dict_only_used_columns(df: pd.DataFrame) -> list[str]:return [remove_words(row[remove_col], row[words_to_remove_col])for row in df[[remove_col, words_to_remove_col]].to_dict(orient="records")]
「キャッシュ」
これまでに説明した反復手法に加えて、他の 2 つの方法もコードのパフォーマンスの向上に役立ちます。そして並列化。キャッシュは、同じパラメーターを使用して pandas 関数を複数回呼び出す場合に特に便利です。たとえば、多くの重複値を含むデータセットにremove_wordsが適用された場合、functools.lru_cacheを使用して関数の結果を保存し、毎回再計算する必要がなくなります。 lru_cache を使用するには、remove_words の宣言に @lru_cache デコレーターを追加し、好みの反復方法を使用して関数をデータセットに適用するだけです。これにより、コードの速度と効率が大幅に向上します。次のコードを例に挙げます。
@lru_cachedef remove_words(...):... # Same implementation as beforedef zip_only_used_cols_cached(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]
このデコレータを追加すると、以前に遭遇した入力の出力を「記憶」する関数が生成され、すべてのコードを再度実行する必要がなくなります。
「並列化」
最後の切り札は、pandarallel を使用して、複数の独立した df ブロックにわたって関数呼び出しを並列化することです。このツールの使い方は簡単です。インポートして初期化し、すべての .applys を .Parallel_applys に変更するだけです。
rree以上がPandas コードの効率を向上させるための 2 つの素晴らしいヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

「AI-Ready労働力」という用語は頻繁に使用されますが、サプライチェーン業界ではどういう意味ですか? サプライチェーン管理協会(ASCM)のCEOであるAbe Eshkenaziによると、批評家ができる専門家を意味します

分散型AI革命は静かに勢いを増しています。 今週の金曜日、テキサス州オースティンでは、ビテンサーのエンドゲームサミットは極めて重要な瞬間を示し、理論から実用的な応用に分散したAI(DEAI)を移行します。 派手なコマーシャルとは異なり

エンタープライズAIはデータ統合の課題に直面しています エンタープライズAIの適用は、ビジネスデータを継続的に学習することで正確性と実用性を維持できるシステムを構築する大きな課題に直面しています。 NEMOマイクロサービスは、NVIDIAが「データフライホイール」と呼んでいるものを作成することにより、この問題を解決し、AIシステムがエンタープライズ情報とユーザーインタラクションへの継続的な露出を通じて関連性を維持できるようにします。 この新しく発売されたツールキットには、5つの重要なマイクロサービスが含まれています。 NEMOカスタマイザーは、より高いトレーニングスループットを備えた大規模な言語モデルの微調整を処理します。 NEMO評価者は、カスタムベンチマークのAIモデルの簡素化された評価を提供します。 Nemo Guardrailsは、コンプライアンスと適切性を維持するためにセキュリティ管理を実装しています

AI:芸術とデザインの未来 人工知能(AI)は、前例のない方法で芸術とデザインの分野を変えており、その影響はもはやアマチュアに限定されませんが、より深く影響を与えています。 AIによって生成されたアートワークとデザインスキームは、広告、ソーシャルメディアの画像生成、Webデザインなど、多くのトランザクションデザインアクティビティで従来の素材画像とデザイナーに迅速に置き換えられています。 ただし、プロのアーティストやデザイナーもAIの実用的な価値を見つけています。 AIを補助ツールとして使用して、新しい美的可能性を探求し、さまざまなスタイルをブレンドし、新しい視覚効果を作成します。 AIは、アーティストやデザイナーが繰り返しタスクを自動化し、さまざまなデザイン要素を提案し、創造的な入力を提供するのを支援します。 AIはスタイル転送をサポートします。これは、画像のスタイルを適用することです

最初はビデオ会議プラットフォームで知られていたZoomは、エージェントAIの革新的な使用で職場革命をリードしています。 ZoomのCTOであるXD Huangとの最近の会話は、同社の野心的なビジョンを明らかにしました。 エージェントAIの定義 huang d

AIは教育に革命をもたらしますか? この質問は、教育者と利害関係者の間で深刻な反省を促しています。 AIの教育への統合は、機会と課題の両方をもたらします。 Tech Edvocate NotesのMatthew Lynch、Universitとして

米国における科学的研究と技術の開発は、おそらく予算削減のために課題に直面する可能性があります。 Natureによると、海外の雇用を申請するアメリカの科学者の数は、2024年の同じ期間と比較して、2025年1月から3月まで32%増加しました。以前の世論調査では、調査した研究者の75%がヨーロッパとカナダでの仕事の検索を検討していることが示されました。 NIHとNSFの助成金は過去数か月で終了し、NIHの新しい助成金は今年約23億ドル減少し、3分の1近く減少しました。リークされた予算の提案は、トランプ政権が科学機関の予算を急激に削減していることを検討しており、最大50%の削減の可能性があることを示しています。 基礎研究の分野での混乱は、米国の主要な利点の1つである海外の才能を引き付けることにも影響を与えています。 35

Openaiは、強力なGPT-4.1シリーズを発表しました。実際のアプリケーション向けに設計された3つの高度な言語モデルのファミリー。 この大幅な飛躍は、より速い応答時間、理解の強化、およびTと比較した大幅に削減されたコストを提供します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 中国語版
中国語版、とても使いやすい

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









