列からindexへ変換する

pandasでは、DataFrameのインデックスを使って、行を特定したり、特定のメソッドを処理したりします。
その場合、列をインデックスにしたり、逆にインデックスから列に移したりすることがあります。

本クエストでは、列とインデックス間の変換方法を学びます。
また、列の名前を変える方法を学びます。

まずは、列からインデックスへの変換方法について学びます。
下記のように、製品ごとの売上記録のDataFrameがあります。インデックスは0, 1, 2です。

DateProdSale
010/01A00120
110/04B01011
210/05A0058

この表の列Dateをインデックスにすると、次のようになります。
左上のDateがインデックスの名前です。インデックスは10/0110/0410/05です。


Date
Prod
 
Sale
 
10/01A00120
10/04B01011
10/05A0058

上表では、インデックスが列Dateの内容で置き換えられ、列Dateはなくなります。

列をインデックスに変換するには、下記のようにします。

df.set_index(列名)

下記のように、オプションinplaceの違いで動作が変わります。

  • df.set_index(列名):変更したDataFrameを返します。dfは変更されません
  • df.set_index(列名, inplace=True):この式は何も返しません。df自体が変更されます。

たとえば、変数dfに対し列Dateをインデックスにするには、下記のようにします。

df.set_index("Date", inplace=True)

この処理で、変数dfが変更されます。

演習

製品ごとの売上記録のDataFrameを作成します。

import pandas as pd

df = pd.DataFrame(
    [
        ["10/01", "A001", 20],
        ["10/04", "B010", 11],
        ["10/05", "A005", 8],
    ],
    columns=["Date", "Prod", "Sale"]
)
df
DateProdSale
010/01A00120
110/04B01011
210/05A0058

Dateをインデックスに変換して、dfを確認します。inplace=Trueによりdfが変更されます。

df.set_index("Date", inplace=True)
df
ProdSale
Date
10/01A00120
10/04B01011
10/05A0058

もし、こちらだったら

df.set_index("Date")
df
DateProdSale
010/01A00120
110/04B01011
210/05A0058

変化はない。

コメント

タイトルとURLをコピーしました