パッケージ概要#

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コードで extensively に調整されています。ただし、他のすべてと同様に、汎用化は通常、パフォーマンスを犠牲にします。したがって、アプリケーションのために1つの機能に焦点を当てる場合、より高速な特殊なツールを作成できる可能性があります。

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

  • pandasは金融アプリケーションのプロダクション環境で広く使用されています。

データ構造#

次元

名前

説明

1

Series

1次元ラベル付き同種型配列

2

DataFrame

潜在的に異種型の列を持つ、汎用2次元ラベル付き、サイズ変更可能な表形式構造

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

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

また、時系列データセットとクロスセクションデータセットの典型的な向きを考慮に入れた、一般的なAPI関数に対する妥当なデフォルト動作を望んでいます。2次元および3次元データを格納するためにN次元配列(ndarrays)を使用する場合、関数を作成する際にデータセットの向きを考慮する負担がユーザーにかかります。軸は多かれ少なかれ同等と見なされます(パフォーマンスのためにCまたはFortran連続性が重要である場合を除く)。pandasでは、軸はデータにより多くの意味論的な意味を与えることを意図しています。つまり、特定のデータセットに対して、データを配置する「正しい」方法がある可能性が高いです。その目標は、下流関数でデータ変換をコーディングするために必要な精神的労力を減らすことです。

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

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

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

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

サポートを受ける#

pandasの課題やアイデアに関する最初の窓口は、GitHub Issue Trackerです。一般的な質問がある場合は、pandasコミュニティの専門家がStack Overflowを通じて回答できます。

コミュニティ#

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

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

pandasはNumFOCUSがスポンサーするプロジェクトです。これにより、pandasの世界クラスのオープンソースプロジェクトとしての開発の成功が保証され、プロジェクトに寄付することが可能になります。

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

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

ウェス・マッキニーは生涯慈悲深き独裁者 (BDFL) です。

開発チーム#

コアチームのメンバーリストと詳細情報は、pandasウェブサイトで確認できます。

機関パートナー#

現在の機関パートナーに関する情報は、pandasウェブサイトのページで確認できます。

ライセンス#

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.