こんにちは!インストラクターのフクロウです!
DataFrameには行や列に名前を付けられるという特徴がありますね。
これらがあることでデータが見やすくなり、複雑な操作でもナンバリングを取り違えたりせず便利です。
この記事では、そんなDataFrameの作成には欠かせない行の名前/indexについてお話します。
- index引数で行に名前を付ける
- set_indexメソッドで列をインデックスとして使う
この二つがメインの記事ですので、DataFrameの勉強をしている方は是非読んでみてください!
データフレームと行の名前
DataFrameを作る際には様々なパラメータが使えます。
例えばデータフレームの要素を代入するパラメータだったり、列の名前を設定するcolumnsだったりです。
ここでは、
- 列の名前にfeature変数
- 行の名前にname変数
- DataFrameの要素にdata変数
を与える場合を考えます。
In [1]:
import pandas as pd
import numpy as np
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
この表において、[0,1,2,3]と書かれている列が「行の名前」や「index」と呼んでいるものです。
何も設定しない場合は、上からナンバリングされます。
この値を変更する方法を学んでいきましょう。
indexパラメータ
DataFrameに後からindexを設定
indexパラメータを使うと、作成したDataFrameにindexに当たる値を追加することができます。
この時、行数とdf.indexに代入するリストの要素数が同じ数にならないといけないことに気を付けて下さい。
df2 = df.copy()
df2.index = name
df2
DataFrameを作る際にindexを設定
また、DataFrameを作る時点でindexを指定して作ることも可能です。
df3 = pd.DataFrame(data,
columns=feature,
index=name)
df3
set_index
DataFrameの特定の列をインデックスにするメソッドとして、df.set_indexがあります。
例えばage列を行のインデックスにしたいとき、以下のように列の名前を指定すればOKです。
df4 = df.copy()
df4.set_index("age", # インデックスにしたい列名
inplace=True) # df4を書き換えるならTrue
df4
また、インデックスには複数の列を使うこともできます。
この場合は列名をリストにして関数に渡します。
df5 = df.copy()
df5.set_index(["age", "blood type"], # 列を複数indexに
drop=False) # indexにした列も要素として保持する
まとめ
この記事では、DataFrameの(行の)indexについてのお話をまとめました。
- DataFrameのindexパラメータで行名を指定
- DataFrameのset_indexメソッドで列をインデックスに設定
データフレームを組み合わせてつなげたり新しいものを作ったりすることもあるPandasですから、indexの設定方法は覚えておいて損はありません。
DataFrameらしい使い方をするためにも、この機能を使いこなしてくださいね。