Skip to content
チュートリアル
Python
Understanding Pandas DataFrame Indices | Python

Pandas DataFrameのインデックスの理解:初心者向けガイド

データサイエンティストとして、おそらくPandasライブラリについては既に知っていることでしょう。Pandasは、構造化データを扱うための強力なデータ構造であるDataFrameやSeriesなどの機能を提供しているため、今日最も人気のあるデータ分析ツールの1つです。

このチュートリアルでは、Pandas DataFrameを扱う上で非常に重要な要素であるインデックスに焦点を当てます。インデックスとは何か、なぜ重要であるのか、どのように効果的に扱うかについて説明します。

コードなしでPython Pandas Dataframeからデータ可視化を迅速に行いたい場合は?

PyGWalkerは、可視化付きの探索的データ解析のためのPythonライブラリです。PyGWalker (opens in a new tab)を使えば、pandas dataframe(およびpolars dataframe)をTableauスタイルのユーザーインターフェースに変換して、ビジュアル探索のワークフローをJupyter Notebookのデータ分析とデータ可視化の両方に簡素化できます。

PyGWalkerによるデータ可視化 (opens in a new tab)

DataFrameインデックスとは?

まず、DataFrameインデックスとは何かを理解しましょう。最も基本的なレベルで、インデックスは、Pandas DataFrameの行と列にラベル付けする方法です。

インデックスは、一意の識別子のセットであり、特定のデータ行に迅速かつ効率的にアクセスするための方法を提供する、主キーを持つデータベーステーブルのようなものと考えることができます。また、インデックスは数値または非数値(たとえば日時値)であることに注意することも重要です。

インデックスはDataFrameの不可欠な部分であり、インデックス付け、選択、フィルタリングなどの多くのPandas操作で広く使用されています。

DataFrameインデックスの設定

Pandas DataFrameのデフォルトのインデックスは、0からデータフレームの総行数までの数値インデックスです。ただし、使用用途によっては、DataFrameの他の列にインデックスを設定することができます。

例えば、異なる領域の売上データを含むDataFrameがある場合、'region'列にインデックスを設定して、特定の領域のデータをフィルターや選択することが容易になるようにすると便利です。

DataFrameのインデックスを設定するには、set_index()メソッドを使用します。たとえば、sales_dataというDataFrameがあり、そのインデックスを'region'列に設定したい場合は、次のコードを使用できます。

sales_data = sales_data.set_index('region')

また、indexパラメータを使用して、DataFrameをゼロから作成するときにもインデックスを設定することができます。たとえば、日付の非数値インデックスを持つ売上データのDataFrameを作成する場合は、次のコードを使用できます。

import pandas as pd
 
sales_data = pd.DataFrame({
    'date': ['2022-01-01', '2022-01-02', '2022-01-03'],
    'sales': [100, 200, 150]
}, index=['2022-01-01', '2022-01-02', '2022-01-03'])

DataFrameインデックスの操作

DataFrameのインデックスを設定してからは、フィルタリングや選択などの目的で使用できます。最も一般的な操作の1つは、値による選択です。フロントマッター付きの次のMDXを日本語に翻訳してください:行のインデックス値に基づく特定の行の選択。

インデックスを使用して行を選択するには、 loc []メソッドを使用できます。 たとえば、 'region'列をインデックスとして設定したDataFrameで 'Northeast'地域のすべての販売データを選択したい場合は、次のコードを使用できます。

northeast_sales = sales_data.loc['Northeast']

特定の条件に基づいてDataFrameをフィルタリングするには、インデックスを使用することもできます。 たとえば、 'Northeast'と 'West'地域の販売データだけを含めたい場合は、次のコードを使用できます。

northeast_west_sales = sales_data.loc [['Northeast''West']]

##マルチレベルインデックス

場合によっては、DataFrameに複数のインデックスを使用する必要がある場合があります。 これをマルチレベルインデックスと呼び、データを階層的に整理することができます。

たとえば、複数の地域の複数年にわたる販売データがある場合、 'region'列を第1レベル、 'year'列を第2レベルとしてマルチレベルインデックスを使用したい場合があります。

マルチレベルインデックスを持つDataFrameを作成するには、 set_index()メソッドを複数回使用できます。 たとえば、 'region'、 'year'、および 'sales'の列があるDataFrameがある場合、次のコードを使用してマルチレベルインデックスを作成できます。

sales_data = sales_data.set_index(['region''year'])

マルチレベルインデックスを持つDataFrameがある場合、 loc []メソッドを使用して、インデックスの両方のレベルに基づいてデータを選択できます。 たとえば、 'Northeast'地域の2022年のすべての販売データを選択したい場合は、次のコードを使用できます。

northeast_2022_sales = sales_data.loc [('Northeast'2022)]

DataFrameインデックスのカスタマイズ

場合によっては、デフォルトの数値または列ベースのインデックスがデータに最適でない場合があります。 幸いなことに、Pandasはインデックスをカスタマイズするためのさまざまなオプションを提供しています。

たとえば、カスタム関数または式に基づく数値以外のインデックスを作成する場合は、 Index.map()または Index.from_tuples()メソッドを使用できます。

import pandas as pd
 
#カスタムインデックスを持つDataFrameを作成する
data = pd.DataFrame({
      'x':[123]、
    'y':[456]
}、index = [147])
 
#式を使用してカスタムインデックスを作成する
custom_index = data.index.map(lambda x:x * 10)
 
#カスタムインデックスを使用して新しいDataFrameを作成する
new_data = pd.DataFrame({
    'x':[45]、
    'y':[78]
}、index = [40,50])

まとめ

このチュートリアルでは、Pandas DataFrameインデックスの基本と、それらを効果的に使用する方法について説明しました。 インデックスの設定、インデックスを使用したデータの選択(マルチレベルインデックスを含む)、およびデータに合わせてインデックスをカスタマイズすることを探索しました。

このチュートリアルで得た知識を活用することで、Pandas DataFrameインデックスを使用してデータ分析と視覚化を最適化できます。 このチュートリアルが役立ったことを願っています。 質問やコメントがある場合は、お気軽にお問い合わせください!

参考文献:

よくある質問

  1. DataFrameのインデックスとは何ですか?

    pandasのDataFrameのインデックスは、各行を一意に識別するラベルです。データにアクセスし、操作し、操作を行うための方法として機能します。デフォルトでは、DataFrameには0から始まる数値インデックスが割り当てられますが、特定の列や他の基準に基づいたカスタムインデックスを持つこともあります。

  2. DataFrameには何個のインデックスを持つことができますか?

    pandasのDataFrameは、複数のインデックス、または階層的なインデックスとも呼ばれるものを持つことができます。これにより、各行を複数のラベルやレベルの組み合わせで一意に識別するような複雑なデータ構造が可能となります。DataFrameが持つインデックスの数は固定されておらず、具体的なデータと要件によって異なる場合があります。

  3. DataFrameにインデックスを追加する方法はありますか?

    pandasでは、set_index()メソッドを使用してDataFrameにインデックスを追加することができます。このメソッドを使用すると、DataFrameの1つまたは複数の列を新しいインデックスとして指定できます。さらに、reset_index()メソッドを使用して現在のインデックスを削除し、デフォルトの数値インデックスに戻すこともできます。これらのメソッドにより、DataFrameのインデックスの管理や操作が柔軟に行えます。