今回はPythonの主要なライブラリ群の一つ「pandas」のデータ構造について学んでいく。

pandasはデータの整理や分析を簡単に行うためのツールを持っており、NumPyなどの数値計算ツールと連携して使われることの多いライブラリだ。

NumPyとの大きな違いは、pandasはテーブル形式のデータを扱うことに適しており、高度なデータ構造を持っているという点だ。

まずはそのデータ構造のうち、シリーズ(Series)について詳しくまとめていく。

ライブラリのインポート

まずはシリーズを扱うまえに、pandasをインポートする必要がある。

import pandas as pd

次にSeriesをインポートする。

from pandas import Series

これで準備完了だ。

シリーズ(Series)とは

pandasのシリーズは一次元配列のようなオブジェクトで、インデックスとそれに該当する値を持つ構成となっている。

import pandas as pd
from pandas import Series

obj = pd.Series([5, 6, 7, 8])
obj
# 0    5
# 1    6
# 2    7
# 3    8
# dtype: int64

obj[2] # 7

values属性とindex属性

シリーズにはvalues属性と、index属性が用意されており、それぞれシリーズが持つデータ配列とインデックスオブジェクトを取得することができる。

import pandas as pd
from pandas import Series

obj = pd.Series([5, 6, 7, 8])

obj.values
# array([5, 6, 7, 8])

obj.index
# RangeIndex(start=0, stop=4, step=1)

インデックスにラベルを付けて分かりやすく管理する

また、Pythonのディクショナリのように、インデックスには任意のラベルを付けて管理することも可能だ。

import pandas as pd
from pandas import Series

obj = pd.Series([5, 6, 7, 8], index=['a', 'b', 'c', 'd'])
obj
# a    5
# b    6
# c    7
# d    8
# dtype: int64

NumPy的な操作をシリーズに適用する

NumPyの配列ndarrayで扱った、条件指定によるフィルタリングや関数の適用などをおこなった場合でも、インデックスとデータの関連はそのまま保持される。

import pandas as pd
from pandas import Series

obj = pd.Series([5, 6, 7, 8], index=['a', 'b', 'c', 'd'])

obj[obj > 6]
# c    7
# d    8
# dtype: int64

np.exp(obj)
# a     148.413159
# b     403.428793
# c    1096.633158
# d    2980.957987
# dtype: float64

ディクショナリをシリーズに変換する

Python標準のディクショナリを元に、シリーズを作成することもできる。

import pandas as pd
from pandas import Series

data = {'taro': 100, 'jiro': 85, 'saburo': 90}

obj = pd.Series(data)
obj
# taro      100
# jiro       85
# saburo     90
# dtype: int64

シリーズのname属性

シリーズのオブジェクト自身と、インデックスはそれぞれname属性を持つ。

import pandas as pd
from pandas import Series

data = {'taro': 100, 'jiro': 85, 'saburo': 90}

obj = pd.Series(data)
obj.name = 'Object Name'
obj.index.name = 'Index Name'

obj
# Index Name
# taro      100
# jiro       85
# saburo     90
# Name: Object Name, dtype: int64

シリーズオブジェクトのname属性は、データベースで言うところのテーブル名に該当し、インデックスのname属性は、さしずめカラム名といったところだろうか。

まとめ

pandasではデータ構造として、シリーズとデータフレームを持っているが、今回は一次元配列を扱うシリーズを詳しく取り上げた。

次回は、データベースに構造が近いデータフレームについて紹介する。