Pandas DataFrame DataFrame.set_index()関数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.set_index() メソッドの構文:
  2. コード例:Pandas DataFrame.set_index() メソッドを使用して Pandas DataFrame インデックスを設定する
  3. コード例:Pandas の DataFrame.set_index() メソッドで drop = False を設定する
  4. コード例:Pandas の DataFrame.set_index メソッドで inplace = True を設定する
  5. コード例:Pandas の DataFrame.set_index() メソッドを使用して複数のインデックス列を設定する
  6. コード例:verify_integrityTrue の場合の Pandas の Dataframe.set_index() の動​​作
Pandas DataFrame DataFrame.set_index()関数

pandas.DataFrame.set_index() メソッドを使用すると、DataFrame の作成後でも、適切な長さの配列または列を DataFrame のインデックスとして設定できます。新しく設定されたインデックスは、既存のインデックスを置き換えることも、既存のインデックスを拡張することもできます。

pandas.DataFrame.set_index() メソッドの構文:

DataFrame.set_index(
    keys, drop=True, append=False, inplace=False, verify_integrity=False
)

パラメーター

keys インデックスとして設定される列または列のリスト
drop ブール。デフォルト値は True で、インデックスとして設定する列を削除します
append ブール。デフォルト値は False で、既存のインデックスに列を追加するかどうかを指定します。
inplace ブール。True の場合、呼び出し元の DataFrame をインプレースで変更します
verify_integrity ブール。True の場合、重複したインデックスを作成するときに ValueError を送出します。デフォルト値は False です。

戻り値

inplaceTrue の場合、変更されたインデックス列を持つ DataFrame オブジェクトを返します。それ以外の場合は None

コード例:Pandas DataFrame.set_index() メソッドを使用して Pandas DataFrame インデックスを設定する

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" ) ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier']) 
print(df)
df_modified=df.set_index("Name")
print(df_modified)

出力:

        Name  Price In_Stock Supplier
0     Orange     34      Yes      ABC
1      Mango     24       No      ABC
2     banana     14       No      ABC
3      Apple     44      Yes      XYZ
4  Pineapple     64       No      XYZ
5       Kiwi     84      Yes      XYZ
           Price In_Stock Supplier
Name                              
Orange        34      Yes      ABC
Mango         24       No      ABC
banana        14       No      ABC
Apple         44      Yes      XYZ
Pineapple     64       No      XYZ
Kiwi          84      Yes      XYZ

元の Dataframe にはデフォルトのインデックス列として数値の範囲があり、modified_df では、set_index() メソッドを使用して列として Name をインデックスとして設定します。

コード例:Pandas の DataFrame.set_index() メソッドで drop = False を設定する

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier']) 
print(df)

df_modified=df.set_index("Name",drop=False)

print(df_modified)

出力:

     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
          Name  Price In_Stock Supplier
Name                                   
Orange  Orange     34      Yes      ABC
Mango    Mango     24       No      ABC
banana  banana     14       No      ABC
Apple    Apple     44      Yes      XYZ

DataFrameset_index メソッドで drop = False を設定した場合、Name 列は index 列として設定された後でも、Dataframe の列として残ります。

コード例:Pandas の DataFrame.set_index メソッドで inplace = True を設定する

import pandas as pd

fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
print("Before Setting Index:")
print(df)
df.set_index("Name",inplace=True)
print("After Setting Index:")
print(df)

出力:

Before Setting Index:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
After Setting Index:
        Price In_Stock Supplier
Name                           
Orange     34      Yes      ABC
Mango      24       No      ABC
banana     14       No      ABC
Apple      44      Yes      XYZ

set_index() メソッドで inplace = True を設定すると、呼び出し元の dataFrame はインプレースで変更されます。

コード例:Pandas の DataFrame.set_index() メソッドを使用して複数のインデックス列を設定する

import pandas as pd

fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
print("Before Setting Index:")
print(df)
df.set_index("Name",append=True,inplace=True,drop=False)
print("After Setting Index:")
print(df)

出力:

Before Setting Index:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
After Setting Index:
            Name  Price In_Stock Supplier
  Name                                   
0 Orange  Orange     34      Yes      ABC
1 Mango    Mango     24       No      ABC
2 banana  banana     14       No      ABC
3 Apple    Apple     44      Yes      XYZ

set_index メソッドで append = True を設定すると、新しく設定されたインデックス列が既存のインデックスに追加され、単一の DataFrame. に複数のインデックス列が含まれます。

コード例:verify_integrityTrue の場合の Pandas の Dataframe.set_index() の動​​作

import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes", "ABC"),
    ("Mango", 24, "No", "ABC"),
    ("Apple", 14, "No", "ABC"),
    ("Apple", 44, "Yes", "XYZ"),
]

df = pd.DataFrame(fruit_list, columns=["Name", "Price", "In_Stock", "Supplier"])

df_modified = df.set_index("Name", verify_integrity=True)
print(df_modified)

出力:

Traceback (most recent call last):
  .....line 3920, in set_index
    dup=duplicates))
ValueError: Index has duplicate keys: Index(['Apple'], dtype='object', name='Name')

インデックスには重複したインデックス-Apple があるため、ValueError が発生します。インデックスに設定されている列に 2つの Apple があります。したがって、set_index() メソッドで verify_integrityTrue に設定されている場合、エラーが発生します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame