PandasのDataFrameのindex化|カラムやリスト,rangeをindexにする方法

スポンサーリンク

この記事では、PythonでPandas DataFrameオブジェクトのインデックスを設定するための様々な方法について説明します。

スポンサーリンク

Pandas Dataframe のインデックス作成とはどういうことか?

Pythonでは、Pandasモジュールで定義されている pd.DataFrame() 関数を用いてPandas DataFrameオブジェクトを作成すると、(デフォルトで)行インデックスと列インデックスという形で、DataFrameの各データ要素/点を表すアドレスが生成され、これをインデックスと呼びます。

しかし、行インデックスをDataFrameのインデックスと呼び、列インデックスを単にカラムと呼びます。

Pandas DataFrameオブジェクトのインデックスは、その行を一意に識別します。

それでは、Pythonで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("
This is the initial DataFrame:"
)
print(df)
 
# Set the Roll column as the index
# using set_index() function
df = df.set_index('Roll')
print("
This is the final DataFrame:"
)
print(df)

既存のカラムを使ったDataFrameのインデックスを設定する

Pythonでは、以下の方法で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("
This is the initial DataFrame:"
)
print(df)
 
# Set the Name column as the index
# using set_index() function with drop
df = df.set_index('Name', drop = False)
print("
This is the final DataFrame:"
)
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("
This is the initial DataFrame:"
)
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("
This is the final DataFrame:"
)
print(df)

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("
This is the initial DataFrame:"
)
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("
This is the final DataFrame:"
)
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("
This is the initial DataFrame:"
)
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("
This is the final DataFrame:"
)
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("
This is the initial DataFrame:"
)
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("
This is the final DataFrame:"
)
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

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("
This is the initial DataFrame:"
)
print(df)
 
# Set Roll column as the index of the DataFrame
# using set_index() function & append
df = df.set_index('Roll', append = True)
print("
This is the final DataFrame:"
)
print(df)

結果は以下の通りです。

Set Index Using Index Parameter

2. Pythonの範囲をDataFrameのインデックスにする

このメソッドでは、 pd.Index()set_index() 関数を使用して Pandas DataFrame オブジェクトのインデックスを設定します。

まず、Python のリストを作成し、それを pd.Index() 関数に渡して、DataFrame のインデックスオブジェクトを返します。

そして、返されたDataFrameのインデックスオブジェクトを set_index() 関数に渡して、DataFrameの新しいインデックスとしてセットします。

それでは、Pythonのコードで実装してみましょう。

Set Column As Index

結果は以下の通りです。

Set Index Using Drop Parameter

3. Pythonの系列をDataFrameのインデックスにする

このメソッドでは、Pandas DataFrame オブジェクトのインデックスを pd.Series(), set_index() 関数で設定します。

まず、Python のリストを作成し、それを pd.Series() 関数に渡します。

この関数は、DataFrame のインデックスオブジェクトとして使用できる Pandas の系列を返します。

そして、返されたPandasの系列を set_index() 関数に渡して、DataFrameの新しいインデックスとして設定します。

それでは、Pythonのコードで実装してみましょう。

Set Columns As Multi Index

結果は以下の通りです。

Set List As Index

4. 古いインデックスを保持したままDataFrameのインデックスを設定する

このメソッドでは、Python Pandasモジュールの set_index() 関数のオプションパラメータである append パラメータを使用します。

デフォルトでは、append パラメータの値は False です。

しかし、ここでは append パラメータの値を True に設定します。

そうすることで、DataFrameの古いインデックスに、 set_index() 関数に渡された新しいインデックスが追加されます。

では、Pythonのコードで実装してみましょう。

Set Range As Index

結果は以下の通りです。

Set Index Using Append Parameter

まとめ

この記事では、以下のことを学びました。

  • Pandas DataFrame オブジェクトのインデックスとは何ですか?
    Pandas DataFrame オブジェクトのインデックスとは何か * DataFrame の作成時にインデックスを設定する方法
  • DataFrame の既存のカラムをインデックスやマルチインデックスとして設定する方法は?
  • リスト、レンジ、PandasシリーズなどのPythonオブジェクトをインデックスとして設定する方法は?
  • どのように古いものを維持したまま新しいインデックスを設定するのですか?
タイトルとURLをコピーしました