pandas~Series~編
前書き
今回から、データ分析でよく用いられるpandasライブラリを紹介していきます。
インストール
まずは、pip install pandas
でライブラリをインストールしましょう。
すでにインストールされている方は必要ありません。
pandasとは
pandasとは、行と列の形式で保存されたデータを効率的に処理する機能を有するライブラリです。行と列の形式で保存されたデータとはエクセルで用いられるcsvファイルやデータベースなどがあります。
pandasのデータ構造
pandasは シリーズ(Series)とデータフレーム(DataFrame)という2つのデータ構造を提供しています。これらのデータ構造に慣れることがpandasを使いこなすことに繋がります。今回はシリーズ就いて説明します。
シリーズ(Series)
シリーズは1次元配列のようなオブジェクトです。シリーズが配列と違う点は、データ配列に関連づけられたインデックスというデータラベル配列を含むという点です。
シリーズの作成
シリーズはlistやarrayといった1次元データ配列を引数とし、構成されます。サンプルを見ましょう。
# sample.py import pandas as pd # 慣例 import numpy as np obj = pd.Series([1, 2, 3, 5, 8]) # リストをシリーズに変換 print("object:", obj) print("values:", obj.values) # objの要素を返す print("index:", obj.index) # objのインデックスを返す print() obj = pd.Series(np.array([2, 4, 6, 8, 10])) # arrayをシリーズに変換 print("object:", obj)
# 実行結果 object: 0 1 1 2 2 3 3 5 4 8 dtype: int64 values: [1 2 3 5 8] index: RangeIndex(start=0, stop=5, step=1) object: 0 2 1 4 2 6 3 8 4 10 dtype: int64
実行結果は上記のようになります。1次元のデータ配列からシリーズオブジェクトを作成できました。また、シリーズのvalues属性とindex属性を利用することで、データ配列とそのインデックスを取得できることもわかると思います。dtype: int64という記述は要素のタイプを表しています。
シリーズの作成~インデックスを添えて~
今度はインデックスを指定しながらシリーズを作成します。
# sample.py import pandas as pd obj = pd.Series([1, 2, 3, 5], index=['a', 'b', 'c', 'd']) print("object:", obj) print("index:", obj.index)
object: a 1 b 2 c 3 d 5 dtype: int64 index: Index(['a', 'b', 'c', 'd'], dtype='object') #
実行結果を見てわかるように、インデックを指定することができました。また、obj.indexによって得られるインデックスの表示も変わっていることに注意しましょう。
また、ディクショナリ形式のデータを引数にすることもできます。この場合、ディクショナリのキーがインデックスになります。
import pandas as pd dict = {'a': 10, 'b': 20, 'c': 30} obj = pd.Series(dict) print("object:", obj) print("index:", obj.index)
# 実行結果 object: a 10 b 20 c 30 dtype: int64 index: Index(['a', 'b', 'c'], dtype='object')
シリーズに対する操作
シリーズはNumpyの配列のように操作することができます。
# インタプリタで実行してます >>> import pandas as pd >>> values = [2, 6, 3, 7, 4] >>> index = ['a', 'd', 'b', 'e', 'b'] >>> obj = pd.Series(values, index) >>> obj a 2 d 6 b 3 e 7 b 4 dtype: int64 >>> obj[0] # オフセットの指定 2 >>> obj['a'] # インデックスの指定 2 >>> obj * 2 # 掛け算の適用(ブロードキャスト) a 4 d 12 b 6 e 14 b 8 dtype: int64 >>> obj > 5 # フィルタリング a False d True b False e True b False dtype: bool >>> 'a' in obj # インデックの中に含まれているか True
実行結果は上記のようになります。今までやってきたリストや配列、辞書に対する操作と似ていますね。この他にも色々な操作があるので試してください。
後書き
今回はpandasのSeriesについて説明しました。次回はDataFrameについて説明します。