【Pandas入門】pandasのindexの扱いと行に名前を付けるset_index!

こんにちは!インストラクターのフクロウです!

DataFrameには行や列に名前を付けられるという特徴がありますね。

これらがあることでデータが見やすくなり、複雑な操作でもナンバリングを取り違えたりせず便利です。

この記事では、そんなDataFrameの作成には欠かせない行の名前/indexについてお話します。

  • index引数で行に名前を付ける
  • set_indexメソッドで列をインデックスとして使う

この二つがメインの記事ですので、DataFrameの勉強をしている方は是非読んでみてください!

目次

データフレームと行の名前

DataFrameを作る際には様々なパラメータが使えます。

例えばデータフレームの要素を代入するパラメータだったり、列の名前を設定するcolumnsだったりです。

ここでは、

  • 列の名前にfeature変数
  • 行の名前にname変数
  • DataFrameの要素にdata変数

を与える場合を考えます。

In [1]:

import pandas as pd 
import numpy as np
In [2]:
name = ["taro","jiro","saburo","shiro"]

feature = ["height","weight","blood type","age"]

data = np.array([
    [190,180,170,160],
    [100,90,80,70],
    ["A","B","AB","O"],
    [30,28,26,24]
]).T

df = pd.DataFrame(data, 
                  columns=feature)
df
Out[2]:
height weight blood type age
0 190 100 A 30
1 180 90 B 28
2 170 80 AB 26
3 160 70 O 24

この表において、[0,1,2,3]と書かれている列が「行の名前」や「index」と呼んでいるものです。

何も設定しない場合は、上からナンバリングされます。

この値を変更する方法を学んでいきましょう。

indexパラメータ

DataFrameに後からindexを設定

indexパラメータを使うと、作成したDataFrameにindexに当たる値を追加することができます。

この時、行数とdf.indexに代入するリストの要素数が同じ数にならないといけないことに気を付けて下さい。

In [3]:
df2 = df.copy()
df2.index = name

df2
Out[3]:
height weight blood type age
taro 190 100 A 30
jiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

DataFrameを作る際にindexを設定

また、DataFrameを作る時点でindexを指定して作ることも可能です。

In [4]:
df3 = pd.DataFrame(data, 
                   columns=feature, 
                   index=name)
df3
Out[4]:
height weight blood type age
taro 190 100 A 30
jiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

set_index

DataFrameの特定の列をインデックスにするメソッドとして、df.set_indexがあります。

例えばage列を行のインデックスにしたいとき、以下のように列の名前を指定すればOKです。

In [5]:
df4 = df.copy()
df4.set_index("age",        # インデックスにしたい列名
              inplace=True) # df4を書き換えるならTrue

df4
Out[5]:
height weight blood type
age
30 190 100 A
28 180 90 B
26 170 80 AB
24 160 70 O

また、インデックスには複数の列を使うこともできます。

この場合は列名をリストにして関数に渡します。

In [6]:
df5 = df.copy()
df5.set_index(["age", "blood type"], # 列を複数indexに
              drop=False)            # indexにした列も要素として保持する
Out[6]:
height weight blood type age
age blood type
30 A 190 100 A 30
28 B 180 90 B 28
26 AB 170 80 AB 26
24 O 160 70 O 24

まとめ

この記事では、DataFrameの(行の)indexについてのお話をまとめました。

  • DataFrameのindexパラメータで行名を指定
  • DataFrameのset_indexメソッドで列をインデックスに設定

データフレームを組み合わせてつなげたり新しいものを作ったりすることもあるPandasですから、indexの設定方法は覚えておいて損はありません。

DataFrameらしい使い方をするためにも、この機能を使いこなしてくださいね。

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次