この記事では、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 module import pandas as pd
# Create a Python dictionary data = { 'Name' : [ 'Rajan' , 'Raman' , 'Deepak' , 'David' , 'Shivam' ],
'Marks' : [ 93 , 88 , 95 , 75 , 99 ],
'City' : [ 'Agra' , 'Pune' , 'Delhi' , 'Sivan' , 'Delhi' ]}
# Create a Python list of Roll NOs Roll = [ 11 , 12 , 13 , 14 , 15 ]
# Create a DataFrame from the dictionary # and set Roll column as the index # using DataFrame() function with index parameter df = pd.DataFrame(data, index = Roll)
print (df)
|
結果は以下の通りです。
# Import Pandas module import pandas as pd
# Create a Python dictionary data = { 'Name' : [ 'Rajan' , 'Raman' , 'Deepak' , 'David' ],
'Roll' : [ 11 , 12 , 13 , 14 ],
'Marks' : [ 93 , 88 , 95 , 75 ]}
# Create a DataFrame from the dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Set the Roll column as the index # using set_index() function df = 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 module import pandas as pd
# Create a Python dictionary data = { 'Roll' : [ 111 , 112 , 113 , 114 ],
'Name' : [ 'Rajan' , 'Raman' , 'Deepak' , 'David' ],
'Marks' : [ 93 , 88 , 95 , 75 ]}
# Create a DataFrame from the dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Set the Name column as the index # using set_index() function with drop df = df.set_index( 'Name' , drop = False )
print ( " )
print (df)
|
結果は以下の通りです。
# Import Pandas module import pandas as pd
# Create a Python dictionary data = { '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 dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Set the Roll & Name column as the multi-index # using set_index() function and list of column names df = df.set_index([ 'Roll' , 'Name' ])
print ( " )
print (df)
|
この記事もチェック:PythonのPandasでブールインデックス参照を実装する方法
2. カラムをインデックスとして設定する (カラムを保持する)
このメソッドでは、Python Pandasモジュールの set_index()
関数のオプションパラメータである drop
パラメータを使用します。
デフォルトでは、 drop
パラメータの値は True
です。
しかし、ここでは drop
パラメータの値を False
に設定します。
そうすることで、新しいインデックスとして設定されたカラムがDataFrameから削除されないようにします。
それでは、Pythonのコードで実装してみましょう。
# Import Pandas module import pandas as pd
# Create a Python dictionary data = { '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 dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Create a Python list list = [ 'I' , 'II' , 'III' , 'IV' , 'V' ]
# Create a DataFrame index object # using pd.Index() function idx = pd.Index( list )
# Set the above DataFrame index object as the index # using set_index() function df = df.set_index(idx)
print ( " )
print (df)
|
結果は以下の通りです。
# Import Pandas module import pandas as pd
# Create a Python dictionary data = { '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 dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Create a DataFrame index object # using pd.Index() & range() function idx = pd.Index( range ( 1 , 6 , 1 ))
# Set the above DataFrame index object as the index # using set_index() function df = df.set_index(idx)
print ( " )
print (df)
|
3. DataFrame のインデックスとして複数のカラムを設定する
このメソッドでは、Pandas DataFrame オブジェクトのカラム名のリストを作成し、 set_index()
関数に渡すことで、複数のカラムをインデックスとして設定することができます。
そのため、この場合のインデックスはmulti-indexと呼ばれます。
それでは、Pythonのコードで実装してみましょう。
# Import Pandas module import pandas as pd
# Create a Python dictionary data = { '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 dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Create a Pandas series # using pd.Series() function & Python list series_idx = pd.Series([ 5 , 4 , 3 , 2 , 1 ])
# Set the above Pandas series as the index # using set_index() function df = df.set_index(series_idx)
print ( " )
print (df)
|
結果は以下の通りです。
This is the initial DataFrame: Roll Name Marks City
0 111 Rajan 93 Agra 1 112 Raman 88 Pune 2 113 Deepak 95 Delhi 3 114 David 75 Sivan 4 115 Shivam 99 Delhi This is the final DataFrame: Roll Name Marks City
5 111 Rajan 93 Agra 4 112 Raman 88 Pune 3 113 Deepak 95 Delhi 2 114 David 75 Sivan 1 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 module import pandas as pd
# Create a Python dictionary data = { '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 dictionary df = pd.DataFrame(data)
print ( " )
print (df)
# Set Roll column as the index of the DataFrame # using set_index() function & append df = 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を作成する方法