パッケージ概要#

pandas は、高速で柔軟性があり、表現力豊かなデータ構造を提供する Python パッケージであり、「リレーショナル」データまたは「ラベル付き」データを簡単かつ直感的に処理できるように設計されています。これは、Python での実用的な、現実世界のデータ分析を行うための基本的な高レベルの構成要素となることを目指しています。さらに、あらゆる言語で利用可能な最も強力で柔軟なオープンソースのデータ分析/操作ツールになるという、より幅広い目標を持っています。すでにこの目標に向けて順調に進んでいます。

pandas は、さまざまな種類のデータに適しています

  • SQLテーブルやExcelスプレッドシートのように、異種型の列を持つ表形式データ

  • 順序付けられた、および順序付けられていない(必ずしも固定頻度ではない)時系列データ。

  • 行と列のラベルを持つ任意の行列データ(同種型または異種型)

  • その他の形式の観測/統計データセット。 pandas のデータ構造に入れるために、データにラベルを付ける必要はありません

pandas の 2 つの主要なデータ構造である、Series (1次元)と DataFrame(2次元)は、金融、統計、社会科学、およびエンジニアリングの多くの分野での典型的なユースケースの大部分を処理します。 R ユーザーにとって、DataFrame は、R の data.frame が提供するすべてと、さらに多くの機能を提供します。 pandas は NumPy の上に構築されており、他の多くのサードパーティライブラリとの科学計算環境によく統合されることを意図しています。

pandas が得意とすることのほんの一部を以下に示します

  • 浮動小数点データだけでなく非浮動小数点データにおける欠損データ(NaN として表される)の簡単な処理

  • サイズ可変性:列は DataFrame および高次元オブジェクトから挿入および削除できます

  • 自動および明示的なデータアラインメント:オブジェクトをラベルのセットに明示的に整列させることも、ユーザーがラベルを無視して SeriesDataFrame などに計算でデータを自動的に整列させることもできます

  • データセットに対して分割-適用-結合操作を実行するための強力で柔軟なグループ化機能。データの集計と変換の両方に対応

  • 他の Python および NumPy データ構造内の不揃いな、異なるインデックス付けされたデータを DataFrame オブジェクトに簡単に変換

  • 大きなデータセットのインテリジェントなラベルベースのスライシングファンシーインデックス、およびサブセット化

  • 直感的なデータセットのマージ結合

  • データセットの柔軟なリシェイプとピボット

  • 軸の階層的なラベル付け(1つのティックに複数のラベルを設定可能)

  • フラットファイル(CSVおよび区切り文字付き)、Excelファイル、データベースからデータをロードし、超高速の HDF5形式でデータを保存/ロードするための堅牢なIOツール

  • 時系列固有の機能:日付範囲の生成と頻度変換、移動ウィンドウ統計、日付のシフト、およびラグ

これらの原則の多くは、他の言語/科学研究環境を使用する際に頻繁に経験する欠点を解決するためにここにあります。データ科学者にとって、データの処理は通常、複数の段階に分かれています。データの整理とクリーンアップ、分析/モデリング、そして分析結果をプロットまたは表形式表示に適した形式に整理します。 pandas は、これらのすべてのタスクに理想的なツールです。

その他の注意点

  • pandas は高速です。低レベルのアルゴリズムの多くは、Cython コードで大幅に調整されています。ただし、他のものと同様に、汎用化すると通常はパフォーマンスが低下します。したがって、アプリケーションの 1 つの機能に焦点を当てると、より高速な特殊ツールを作成できる場合があります。

  • pandas は statsmodels の依存関係であるため、Python の統計計算エコシステムにおいて重要な部分を担っています。

  • pandas は、金融アプリケーションで広く本番環境で使用されています。

データ構造#

次元

名前

説明

1

Series

1D ラベル付き同種型配列

2

DataFrame

異種型列を持つ可能性のある、汎用的な2Dラベル付き、サイズ可変の表形式構造

なぜ複数のデータ構造があるのですか?#

pandas のデータ構造について考える最適な方法は、低次元データのための柔軟なコンテナとして考えることです。たとえば、DataFrame は Series のコンテナであり、Series はスカラーのコンテナです。これらのコンテナからオブジェクトを辞書のような方法で挿入および削除できるようにする必要があります。

また、時系列データセットおよび断面データセットの一般的な向きを考慮した、一般的な API 関数に対する適切なデフォルト動作が必要になります。N次元配列(ndarrays)を使用して2次元および3次元データを格納する場合、関数を作成するときにデータセットの向きを考慮するという負担がユーザーに課せられます。軸は(パフォーマンスのためにCまたはFortranの連続性が問題となる場合を除き)多かれ少なかれ同等と見なされます。pandas では、軸はデータに対してより意味的な意味を持たせることを意図しています。つまり、特定のデータセットの場合、データを配置する「正しい」方法が存在する可能性があります。したがって、目標は、ダウンストリーム関数でデータ変換をコーディングするために必要な精神的な労力を減らすことです。

たとえば、表形式データ(DataFrame)の場合、軸0と軸1ではなく、インデックス(行)とを考える方が意味的に役立ちます。したがって、DataFrame の列を反復処理すると、より読みやすいコードになります

for col in df.columns:
    series = df[col]
    # do something with series

データの可変性とコピー#

pandas のすべてのデータ構造は値可変(含まれている値を変更できます)ですが、必ずしもサイズ可変ではありません。Series の長さを変更することはできませんが、たとえば、列を DataFrame に挿入できます。ただし、メソッドの大部分は新しいオブジェクトを生成し、入力データはそのままにします。一般的に、適切な場合は不変性を優先します。

サポートの取得#

pandas の問題やアイデアについて最初に問い合わせる場所は、GitHub Issue Tracker です。一般的な質問がある場合は、pandas コミュニティのエキスパートが Stack Overflow で回答できます。

コミュニティ#

pandas は今日、オープンソースの pandas を可能にするために貴重な時間とエネルギーを貢献している世界中の志を同じくする個人のコミュニティによって積極的にサポートされています。すべての貢献者に感謝します。

貢献に興味がある場合は、貢献ガイドをご覧ください。

pandas は NumFOCUS が後援するプロジェクトです。これは、pandas が世界クラスのオープンソースプロジェクトとして確実に発展できるようにし、プロジェクトへの寄付を可能にします。

プロジェクトのガバナンス#

pandas プロジェクトが 2008 年の設立以来非公式に使用してきたガバナンスプロセスは、プロジェクトガバナンス文書に正式化されています。これらの文書は、意思決定の方法と、オープンソースの共同開発と営利または非営利団体が資金提供する可能性のある作業との関係など、コミュニティのさまざまな要素がどのように相互作用するかを明確にしています。

Wes McKinney は、終身慈悲深い独裁者 (BDFL) です。

開発チーム#

コアチームメンバーのリストと詳細については、pandas Webサイトをご覧ください。

制度上のパートナー#

現在の制度上のパートナーに関する情報は、pandas Webサイトページにあります。

ライセンス#

BSD 3-Clause License

Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
All rights reserved.

Copyright (c) 2011-2023, Open source contributors.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.