ぺーぺーSEのブログ

備忘録・メモ用サイト。

Pandas入門

Pythonのデータ操作ライブラリPandasを軽くまとめる。
機械学習などのコーディングでよく使うと思う。

概要

Pandasはデータ操作ライブラリでデータ構造の扱いやデータ分析を簡単に行うことができる。 IPythonと親和性があり、データ表示(表、グラフなど)の際に楽ができる。

PandasにはSeriesDataFrameという2つのデータ構造があり、Seriesは1次元配列であるのに対して、 DataFrameは2次元配列。

Seriesは通常の配列とは異なり、0からの整数だけでなく任意の文字列をインデックスとして使うことができるが、 DataFrameは行と列どちらも、0からの整数や任意の文字列をインデックスとして使うことができる。

SeriesやDataFrameの作成には後述のコード上で作成する方法に加え、テキストファイル(CSV)、ExcelRDB、HDF5フォーマットのファイルからの入力、出力も可能。

Series

IPythonやJupiter Notebookで実行するテイで書く。

■Seriesの作成方法

import numpy as np
import pandas as pd

series_data = pd.Series([1,2,3])
series_data
# 0    1
# 1    2
# 2    3
# dtype: int64

■Seriesの作成方法(インデックス付)

import numpy as np
import pandas as pd

series_data=pd.Series([1,2,3], index=['a','b','c'])
series_data
# a    1
# b    2
# c    3
# dtype: int64

Seriesは様々な関数をもっていて、例えば『max()』は最大値を求めることができる。

series_data.max()
# 3

その他には最小値『min()』、平均値『mean()』、中央値『median()』、分散『var()』、合計値『sum()』等様々ある。

DataFrame

■DataFrameの作成方法

import numpy as np
import pandas as pd

df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]],
                  index = ['i1','i2','i3'],
                  columns = list("abc"))
df
#     a  b  c
# i1  1  4  7
# i2  2  5  8
# i3  3  6  9

■DataFrameの作成方法(ディクショナリから)

import numpy as np
import pandas as pd

df_d = pd.DataFrame({
    'A' : 1.,
    'B' : pd.Timestamp('20130102'),
    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
    'D' : np.array([3] * 4,dtype='int32'),
    'E' : pd.Categorical(["test","train","test","train"]),
    'F' : 'foo' })
df_d
#    A    B           C    D  E      F
# 0  1.0  2013-01-02  1.0  3  test   foo
# 1  1.0  2013-01-02  1.0  3  train  foo
# 2  1.0  2013-01-02  1.0  3  test   foo
# 3  1.0  2013-01-02  1.0  3  train  foo

■DataFrameの作成方法(NunPyの行列から)

import numpy as np
import pandas as pd

matrix = np.random.randn(6,4)
# array([[-0.12536899, -0.75456054, -1.19577963, -0.0848719 ],
#        [-0.98614593,  0.21677862,  1.2834255 , -1.03136611],
#        [-0.09024273, -0.42737333, -1.32127224,  1.82916309],
#        [ 2.32546221,  0.16171471,  0.55143076,  0.6343525 ],
#        [-0.89829105, -0.91013159,  0.58194418, -0.35566087],
#        [-0.32814107, -0.57992834,  0.06743956, -1.9469574 ]])

df_m = pd.DataFrame(matrix, columns=list('ABCD'))
df_m
#    A          B          C          D
# 0  -0.125369  -0.754561  -1.195780  -0.084872
# 1  -0.986146  0.216779   1.283425   -1.031366
# 2  -0.090243  -0.427373  -1.321272  1.829163
# 3  2.325462   0.161715   0.551431   0.634353
# 4  -0.898291  -0.910132  0.581944   -0.355661
# 5  -0.328141  -0.579928  0.067440   -1.946957

■DataFrameの作成方法(CSV読込)

import os
import numpy as np
import pandas as pd

path = os.getcwd() + '\input.txt'  
df_csv = pd.read_csv(path, header=None, names=['a', 'b', 'c'])
df_csv
#    a  b  c
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9

データの表示

DataFrameでは、IPythonで普通に全データを表示するだけでなく加工して表示することができる。
例えば、『head()』はデータの先頭から、『tail()』はデータの末尾からデータを表示することができる。bash的に。

df.head(2)
#     a  b  c
# i1  1  4  7
# i2  2  5  8

その他にも「行列の転置」、「ソート」、インデックスなどによる「抽出」など様々可能。

詳細については公式ドキュメントを参照。