この記事では、PythonでPandas DataFrameオブジェクトのインデックスを設定するための様々な方法について説明します。
Pandas Dataframe のインデックス作成とはどういうことか?
Pythonでは、Pandasモジュールで定義されている pd.DataFrame() 関数を用いてPandas DataFrameオブジェクトを作成すると、(デフォルトで)行インデックスと列インデックスという形で、DataFrameの各データ要素/点を表すアドレスが生成され、これをインデックスと呼びます。
しかし、行インデックスをDataFrameのインデックスと呼び、列インデックスを単にカラムと呼びます。
Pandas DataFrameオブジェクトのインデックスは、その行を一意に識別します。
それでは、PythonでPandas DataFrameオブジェクトのインデックスを設定する様々な方法について、コアな議論を始めましょう。
この記事もチェック:Pandas DataFrameの単一カラムの名前を変更する
作成時にDataFrameのインデックスを設定する
Pythonでは、indexパラメータを使用して、DataFrameを作成する際にインデックスを設定することができます。
この方法では、Pythonのリストを作成し、それを pd.DataFrame() 関数の index パラメータに渡してそのインデックスを設定します。
これをPythonのコードで実装してみましょう。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Name': ['Rajan', 'Raman', 'Deepak', 'David', 'Shivam'],
'Marks': [93, 88, 95, 75, 99],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan', 'Delhi']}
# Create a Python list of Roll NOsRoll = [11, 12, 13, 14, 15]
# Create a DataFrame from the dictionary# and set Roll column as the index# using DataFrame() function with index parameterdf = pd.DataFrame(data, index = Roll)
print(df)
|
結果は以下の通りです。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Name': ['Rajan', 'Raman', 'Deepak', 'David'],
'Roll': [11, 12, 13, 14],
'Marks': [93, 88, 95, 75]}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Set the Roll column as the index# using set_index() functiondf = df.set_index('Roll')
print(")
print(df)
|
この記事もチェック:Pythonのindex関数をリストや文字列の使い方を解説する
既存のカラムを使ったDataFrameのインデックスを設定する
Pythonでは、以下の方法でPandas DataFrameオブジェクトの既存のカラムを簡単にインデックスとして設定することができます。
この記事もチェック:Pandasのdataframeでインデックスをカラム(列、行)に変換する方法
1. カラムをインデックスとして設定する (カラムを保持しない)
このメソッドでは、Python Pandas モジュールの set_index() 関数のオプションパラメータである inplace パラメータを使用します。
デフォルトでは、 inplace パラメータの値は False です。
しかし、ここでは inplace の値を True に設定します。
そうすると、DataFrame の古いインデックスが、新しいインデックスとして pd.set_index() 関数に渡された既存のカラムに置き換えられます。
では、Pythonのコードで実装してみましょう。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114],
'Name': ['Rajan', 'Raman', 'Deepak', 'David'],
'Marks': [93, 88, 95, 75]}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Set the Name column as the index# using set_index() function with dropdf = df.set_index('Name', drop = False)
print(")
print(df)
|
結果は以下の通りです。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114],
'Name': ['Rajan', 'Raman', 'Deepak', 'David'],
'Marks': [93, 88, 95, 75],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan']}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Set the Roll & Name column as the multi-index# using set_index() function and list of column namesdf = df.set_index(['Roll', 'Name'])
print(")
print(df)
|
この記事もチェック:PythonのPandasでブールインデックス参照を実装する方法
2. カラムをインデックスとして設定する (カラムを保持する)
このメソッドでは、Python Pandasモジュールの set_index() 関数のオプションパラメータである drop パラメータを使用します。
デフォルトでは、 drop パラメータの値は True です。
しかし、ここでは drop パラメータの値を False に設定します。
そうすることで、新しいインデックスとして設定されたカラムがDataFrameから削除されないようにします。
それでは、Pythonのコードで実装してみましょう。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114, 115],
'Name': ['Rajan', 'Raman', 'Deepak', 'David', 'Shivam'],
'Marks': [93, 88, 95, 75, 99],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan', 'Delhi']}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Create a Python listlist = ['I', 'II', 'III', 'IV', 'V']
# Create a DataFrame index object# using pd.Index() functionidx = pd.Index(list)
# Set the above DataFrame index object as the index# using set_index() functiondf = df.set_index(idx)
print(")
print(df)
|
結果は以下の通りです。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114, 115],
'Name': ['Rajan', 'Raman', 'Deepak', 'David', 'Shivam'],
'Marks': [93, 88, 95, 75, 99],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan', 'Delhi']}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Create a DataFrame index object# using pd.Index() & range() functionidx = pd.Index(range(1, 6, 1))
# Set the above DataFrame index object as the index# using set_index() functiondf = df.set_index(idx)
print(")
print(df)
|
3. DataFrame のインデックスとして複数のカラムを設定する
このメソッドでは、Pandas DataFrame オブジェクトのカラム名のリストを作成し、 set_index() 関数に渡すことで、複数のカラムをインデックスとして設定することができます。
そのため、この場合のインデックスはmulti-indexと呼ばれます。
それでは、Pythonのコードで実装してみましょう。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114, 115],
'Name': ['Rajan', 'Raman', 'Deepak', 'David', 'Shivam'],
'Marks': [93, 88, 95, 75, 99],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan', 'Delhi']}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Create a Pandas series# using pd.Series() function & Python listseries_idx = pd.Series([5, 4, 3, 2, 1])
# Set the above Pandas series as the index# using set_index() functiondf = df.set_index(series_idx)
print(")
print(df)
|
結果は以下の通りです。
This is the initial DataFrame: Roll Name Marks City
0 111 Rajan 93 Agra1 112 Raman 88 Pune2 113 Deepak 95 Delhi3 114 David 75 Sivan4 115 Shivam 99 DelhiThis is the final DataFrame: Roll Name Marks City
5 111 Rajan 93 Agra4 112 Raman 88 Pune3 113 Deepak 95 Delhi2 114 David 75 Sivan1 115 Shivam 99 Delhi |
この記事もチェック:Pandasのreplaceメソッドを使って複数の値を置換する方法
Pythonオブジェクトを使ったDataFrameのインデックス設定
Pythonでは、以下の方法でリストや範囲、系列などの任意のPythonオブジェクトをPandas DataFrameオブジェクトのインデックスとして設定することが可能です。
1. PythonのリストをDataFrameのインデックスにする
このメソッドでは、 pd.Index(), range(), set_index() 関数を使用して Pandas DataFrame オブジェクトのインデックスを設定します。
まず、Python の range() 関数を使って数列を作成し、それを pd.Index() 関数に渡すと、DataFrame のインデックスオブジェクトが返されます。
そして、返されたDataFrameのインデックスオブジェクトを set_index() 関数に渡して、DataFrameの新しいインデックスとしてセットします。
それでは、Pythonのコードで実装してみましょう。
# Import Pandas moduleimport pandas as pd
# Create a Python dictionarydata = {'Roll': [111, 112, 113, 114, 115],
'Name': ['Rajan', 'Raman', 'Deepak', 'David', 'Shivam'],
'Marks': [93, 88, 95, 75, 99],
'City': ['Agra', 'Pune', 'Delhi', 'Sivan', 'Delhi']}
# Create a DataFrame from the dictionarydf = pd.DataFrame(data)
print(")
print(df)
# Set Roll column as the index of the DataFrame# using set_index() function & appenddf = df.set_index('Roll', append = True)
print(")
print(df)
|
結果は以下の通りです。

2. Pythonの範囲をDataFrameのインデックスにする
このメソッドでは、 pd.Index() と set_index() 関数を使用して Pandas DataFrame オブジェクトのインデックスを設定します。
まず、Python のリストを作成し、それを pd.Index() 関数に渡して、DataFrame のインデックスオブジェクトを返します。
そして、返されたDataFrameのインデックスオブジェクトを set_index() 関数に渡して、DataFrameの新しいインデックスとしてセットします。
それでは、Pythonのコードで実装してみましょう。

結果は以下の通りです。

3. Pythonの系列をDataFrameのインデックスにする
このメソッドでは、Pandas DataFrame オブジェクトのインデックスを pd.Series(), set_index() 関数で設定します。
まず、Python のリストを作成し、それを pd.Series() 関数に渡します。
この関数は、DataFrame のインデックスオブジェクトとして使用できる Pandas の系列を返します。
そして、返されたPandasの系列を set_index() 関数に渡して、DataFrameの新しいインデックスとして設定します。
それでは、Pythonのコードで実装してみましょう。

結果は以下の通りです。

この記事もチェック:Pandasで空のDataFrameを作成する方法を解説する
4. 古いインデックスを保持したままDataFrameのインデックスを設定する
このメソッドでは、Python Pandasモジュールの set_index() 関数のオプションパラメータである append パラメータを使用します。
デフォルトでは、append パラメータの値は False です。
しかし、ここでは append パラメータの値を True に設定します。
そうすることで、DataFrameの古いインデックスに、 set_index() 関数に渡された新しいインデックスが追加されます。
では、Pythonのコードで実装してみましょう。

結果は以下の通りです。

まとめ
この記事では、以下のことを学びました。
- Pandas DataFrame オブジェクトのインデックスとは何ですか?
Pandas DataFrame オブジェクトのインデックスとは何か * DataFrame の作成時にインデックスを設定する方法 - DataFrame の既存のカラムをインデックスやマルチインデックスとして設定する方法は?
- リスト、レンジ、PandasシリーズなどのPythonオブジェクトをインデックスとして設定する方法は?
- どのように古いものを維持したまま新しいインデックスを設定するのですか?
この記事もチェック:PythonのPandasで辞書(dict)からDataFrameを作成する方法