Pandas に 関して
「Pandas」は Python のライブラリで、データを効率的に解析するためのライブラリです。
「行列的」にデータを扱う事ができ、データ処理を強力に実行できます。
マニュアル等は公式サイトを参照してください。
Python Data Analysis Library — pandas: Python Data Analysis Library
Pandas の インストール
以下のリンク先の手順で環境を構築した場合はインストールは不要です。
その他の方法で環境を構築した場合は以下の手順が必要です。
pip install pandas
Pandas の データ型の理解
Pandas を利用する場合はまずはデータ型を理解する必要があります。
Pandas は以下の3種類のデータ構造が扱えます。
型名 | 概要 |
---|---|
Series | 1次元データ |
DataFrame | 2次元データ |
Panel | 3次元データ |
まずは、ライブラリの import をします。
import pandas as pd
Series
基本は「Series」です。
Series は「1次元データ」を扱うためのPandasのデータ型です。
list から生成できます
cnt = pd.Series([10, 20, 30, 50, 80, 130])
cnt
0 10
1 20
2 30
3 50
4 80
5 130
dtype: int64
型は type で確認できます。
type(cnt)
pandas.core.series.Series
値を取得する場合は「values」で簡単に取得できます。
cnt.values
array([ 10, 20, 30, 50, 80, 130])
index を取得できます。デフォルトだと rangeになっています。
cnt.index
RangeIndex(start=0, stop=6, step=1)
index に値を指定する事も可能です。
cnt = pd.Series([10, 20, 30, 50, 80, 130],
index=['a', 'b', 'c', 'd', 'e', 'f'])
cnt
a 10
b 20
c 30
d 50
e 80
f 130
dtype: int64
dictのように取得も可能です。
cnt['b']
20
list の内包表記が利用できます。以下は index を利用して、判定しています。
[v in ('a', 'd') for v in cnt.index]
[True, False, False, True, False, False]
True/False の list を渡すと、True の値のみ抽出が可能です。
cnt[[v in ('a', 'd') for v in cnt.index]]
a 10
d 50
dtype: int64
内部的には deep copy されているため、操作した後でも元の値は変化しません。
cnt
a 10
b 20
c 30
d 50
e 80
f 130
dtype: int64
value の比較で抽出も可能です。
cnt[cnt > 100]
f 130
dtype: int64
最初 list から作成しましたが、dict から作成する事も可能です。
d = {'a': 300, 'b': 400}
newcnt = pd.Series(d)
newcnt
a 300
b 400
dtype: int64
二つの Series は 加算する事ができますが、index が不足した部分は 「NaN」になります。
NaN は「計算不能」を表す値で、 Null とは多少異なる数値です。Null に近い flaot です。
pandas の場合、列の型が混在すると問題ですので、NaN でないと型が混在してしまいます。
型混在によるバグやエラーは対処がしずらい場合がありますので、注意してください。
cnt + newcnt
a 310.0
b 420.0
c NaN
d NaN
e NaN
f NaN
dtype: float64
括弧で囲んで、関数を適用できます。「isnull」は「NaN or Null」かどうか判定します
(cnt + newcnt).isnull()
a False
b False
c True
d True
e True
f True
dtype: bool
DataFrame
DataFrame は2次元を扱うためのPandasのデータ型です。
DataFrame は Series を「列」にもつ型です。
data = pd.DataFrame([cnt, newcnt])
data
a | b | c | d | e | f | |
---|---|---|---|---|---|---|
0 | 10.0 | 20.0 | 30.0 | 50.0 | 80.0 | 130.0 |
1 | 300.0 | 400.0 | NaN | NaN | NaN | NaN |
型も確認してみます.
type(data)
pandas.core.frame.DataFrame
直接生成もできます。
list から生成する場合は columns を指定すると列名が指定できます。
data_a = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=['a', 'b'])
data_a
a | b | |
---|---|---|
0 | 1 | 2 |
1 | 3 | 4 |
2 | 5 | 6 |
dict で生成する場合は、「行」ではなく「列」毎に値を生成します。
dictのkeyが「列」名、valueが「行」の数分値が必要になります。valueの数に不足があるとエラーになります。
d = {
'a': [1, 2, 3],
'b': [5, 6, 7],
}
data_b = pd.DataFrame(d)
data_b
a | b | |
---|---|---|
0 | 1 | 5 |
1 | 2 | 6 |
2 | 3 | 7 |
data
a | b | c | d | e | f | |
---|---|---|---|---|---|---|
0 | 10.0 | 20.0 | 30.0 | 50.0 | 80.0 | 130.0 |
1 | 300.0 | 400.0 | NaN | NaN | NaN | NaN |
特定列だけ抽出してみます。
data[['b', 'a']]
b | a | |
---|---|---|
0 | 20.0 | 10.0 |
1 | 400.0 | 300.0 |
内部のデータ型を取れます。
data.dtypes
a float64
b float64
c float64
d float64
e float64
f float64
dtype: object
列の値を取得したい場合は、以下2種類の方法で取れます。
プログラムで、変数を利用して取得する場合等は、key を利用した取得の方が利用するでしょう。
data.a
data['a']
0 10.0
1 300.0
Name: a, dtype: float64
取得できた物が Series である事も確認してみます。
type(data['a'])
pandas.core.series.Series
列は列名で取得できますが、行は「loc」で取得します。
data.loc[1]
a 300.0
b 400.0
c NaN
d NaN
e NaN
f NaN
Name: 1, dtype: float64
行で取得しても 型は Series です。
type(data.loc[1])
pandas.core.series.Series
Panel
「Panel」は3次元データを扱えます。
2次元データのDataFrameがSeries で構成されていた事から予想できるように、「Panel」は「DataFrame」から構成されます。
data
data_a
data_b
pd.Panel({'1': data, '2': data_a, '3': data_b})
<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 3 (major_axis) x 6 (minor_axis)
Items axis: 1 to 3
Major_axis axis: 0 to 2
Minor_axis axis: a to f
3次元のデータを利用すると、時系列データの分析など、DataFrameを多層に保持するデータの分析が気軽にできます。
扱いは DataFrme と同じ感覚で扱えます。
様々なデータを扱う
少し長くなってきたので、別の文章で記述します。
以下のリンク先で続きを記述します。
書いた人に関して
Tech Fun株式会社スペシャリスト、xza です。
社内で開催した初学者向け勉強会で利用した資料等を公開しています。