初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

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について説明します。