104blog

投資が趣味なITエンジニアの雑記ブログです。

python pandas Dataframeの基本的な使い方(DataFrame作成、値取り出し、index振り直し)

先日、久しぶりにpandas.DataFrameを触ったらすっかり使い方を忘れていたので、メモ代わりにブログ記事を書きます。 

f:id:toyo--104:20190428005726p:plain

Pandas DataFrameとは

pythonのライブラリpandasは、データ操作が得意なライブラリです。

pandasの中にはDataFrameという機能があり、これは二次元配列を扱うことができるデータ構造です。

参考ですが、一次元配列はpandas.Seriesで扱うことができます。

早速、基本的な使い方を紹介していきます。

バージョン情報

今回は、以下のpython、pandasのバージョンで進めます。

・python3.7

・pandas0.24.2

DataFrameを作る

DataFrameを作ること自体は簡単です。DataFrameを宣言する際に、引数に辞書型(値はリスト型)を渡してあげればOKです。

具体例をどうぞ!

# 以下でpandasをimportします。
# 一般的に、pdという別名を付けます。
import pandas as pd

# 以下で、DataFrameにわたす辞書型の変数を定義します。
# 辞書型は、キー : バリュー で表します。
# バリューはリスト([] で囲った形式)にしてください。
data = {"name" : ["山田", "田中", "小林"] , "age" : [30, 21, 40], "from" : ["東京", "大阪", "埼玉"]}

# dfという変数にDataFrameを格納します。
# 引数に、先程作ったdataという辞書型を渡します。
df = pd.DataFrame(data)

# dfをprintしてみます
print(df)

このpythonプログラムを実行してみます。

    name  age from
0   山田   30   東京
1   田中   21   大阪
2   小林   40   埼玉

 

一番左が行番号に相当するインデックス、一番上が各キーの値、その他が実際の値です。

先ほど定義した辞書型と比較してみてください。

DataFrameのイメージが掴めたでしょうか。

 

DataFrameから値を取り出す

DataFrameからのデータの取り出し方は複数あります。順番に紹介しますね。

普通に配列っぽく取り出す

元が以下のような二次元配列だったので、

data = {"name" : ["山田", "田中", "小林"] , "age" : [30, 21, 40], "from" : ["東京", "大阪", "埼玉"]}

こんなふうに普通に配列っぽく取り出すことができます。

df['name'][0]

これをprintしてみると、結果は「山田」です。

nameキーのリストの0番目ですから、当然ですね。

iat、atで行→列の値で指定して取り出す

iat、atで行→列の値で指定して取り出すことができます。

DataFrame.iat[行,列]

上はiatの例ですが、atも同じです

iatは行、列を数字で指定、atは行、列をキーで指定します。

以下が例です。

iat

df.iat[0, 0]

をprintすると、結果は「山田」です。

at

df.at[0, 'age']

をprintすると、結果は「30」です。

この例では、index(行のキー)を特に指定していませんので、行の指定はiatと同じ0になります。

iloc、locで複数の値を取り出す

今度は応用編で複数の値を取り出します

ilocで数字指定、locでキー名指定です。

iloc、loc共に戻り値の型は「pandas.Series」です。

Seriesは冒頭でも紹介したとおり、一次元配列になります。

iloc

以下の例だと

df.iloc[0:2, 1:3]

こうなります。

   age from
0   30   東京
1   21   大阪

注意点としては、「:」で指定した後の値(=stepと呼びます)は含まない点ですね。

こういうものなので、覚えておくしかないでしょう。 

loc

こちらはキー指定。

df.loc[0:2, 'age':'from']

出力結果はこちら。

   age from
0   30   東京
1   21   大阪
2   40   埼玉

locの場合は、ilocと違って「:」で指定した後の値(=step)も含むんですね。

紛らわしい仕様。。

 

indexを設定する

次に、DataFrameにindexを設定する方法をお伝えします。

ちなみに、indexとは、DataFrameを作った時に最初から出来ていた行番号のキー(0,1,2...)のことです。

set_indexメソッドを使って、任意の列をキーにすることが可能です。

df.set_index('キー名')

具体例は以下の通り。

print(df)
# set_indexでnameをindexに指定。
df2 = df.set_index('name')
print(df2)

最初に出力されるdfはこちら。一番左のindexの部分には行番号の数字が並んでいます。

  name  age from
0   山田   30   東京
1   田中   21   大阪
2   小林   40   埼玉

次に、「name」キーをindexにしたdf2のprint結果はこちら。

      age from
name          
山田     30   東京
田中     21   大阪
小林     40   埼玉

indexが「name」に変わっているのがわかると思います。

こうしてindexを振り直せば、atやlocでデータを取り出しやすくなりますね。

 

まとめ

pandasのDataFrameは結構クセが強くて、慣れるまでは使いづらいと思います。

列ベースでリストを指定する辺りとか、珍しい仕様だと思います。

SQLとかだと行ベースのことが多いので。

今後も勉強したら記事にしていきたいと思います。

何かあればコメントなどでお知らせください。