pandasでは、DataFrameのインデックスを使って、行を特定したり、特定のメソッドを処理したりします。
その場合、列をインデックスにしたり、逆にインデックスから列に移したりすることがあります。
本クエストでは、列とインデックス間の変換方法を学びます。
また、列の名前を変える方法を学びます。
まずは、列からインデックスへの変換方法について学びます。
下記のように、製品ごとの売上記録のDataFrameがあります。インデックスは0, 1, 2
です。
Date | Prod | Sale | |
---|---|---|---|
0 | 10/01 | A001 | 20 |
1 | 10/04 | B010 | 11 |
2 | 10/05 | A005 | 8 |
この表の列Date
をインデックスにすると、次のようになります。
左上のDate
がインデックスの名前です。インデックスは10/01
、10/04
、10/05
です。
Date | Prod | Sale |
---|---|---|
10/01 | A001 | 20 |
10/04 | B010 | 11 |
10/05 | A005 | 8 |
上表では、インデックスが列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
Date | Prod | Sale | |
---|---|---|---|
0 | 10/01 | A001 | 20 |
1 | 10/04 | B010 | 11 |
2 | 10/05 | A005 | 8 |
列Date
をインデックスに変換して、df
を確認します。inplace=True
によりdf
が変更されます。
df.set_index("Date", inplace=True)
df
Prod | Sale | |
---|---|---|
Date | ||
10/01 | A001 | 20 |
10/04 | B010 | 11 |
10/05 | A005 | 8 |
もし、こちらだったら
df.set_index("Date")
df
Date | Prod | Sale | |
---|---|---|---|
0 | 10/01 | A001 | 20 |
1 | 10/04 | B010 | 11 |
2 | 10/05 | A005 | 8 |
変化はない。
コメント