【Python】データ解析に欠かせない!Pandasの使い方①

こんにちは、unogram管理人のうのちゅ〜です。

今回は、Pythonによるデータ解析に欠かせないライブラリPandasの使い方を解説します。機械学習に必要なデータの前処理や加工、統計量の算出にも便利で、Pythonユーザならぜひとも使いこなせるようにしておきたいライブラリです。

今回は、Pandas公式の10 minutes to pandasを参考にしています。

Pandasは表計算やCSVファイルとも相性が良いです。Pandasなどを使ったファイル入出力については【Python】ファイル入出力方法(numpy・Pandas他)で解説しているので、こちらもご覧ください。

それでは見ていきましょう!



Pandasの使い方①

pandasのインポート

まずはpandasをインポートします。numpyもインポートしておきましょう。

import pandas as pd
import numpy as np

Seriesオブジェクトの生成

リストを渡してSeriesオブジェクトを生成します。Seriesオブジェクトはpandasのメインオブジェクトの1つで、1次元のデータを格納します。pandasにはSeriesオブジェクトを操作するメソッドが多数用意されています。

s = pd.Series([1,3,5,np.nan,6,8])
print(s)
# 0    1.0
# 1    3.0
# 2    5.0
# 3    NaN
# 4    6.0
# 5    8.0
# dtype: float64

DataFrameオブジェクトの生成①

多次元配列を渡してDataFrameオブジェクトを生成します。DataFrameオブジェクトもpandasのメインオブジェクトの1つで、基本的に2次元のデータを格納します。

pandasにはDataFrameオブジェクトを操作するメソッドが多数用意されており、加工やソート、統計量の算出などを簡単に行うことができます。

# index(行の名前)を準備します。
# pd_date_rangeでDatetimeIndexを生成できます。
dates = pd.date_range('20201028', periods=6)
print(dates)
# DatetimeIndex(['2020-10-28', '2020-10-29', '2020-10-30', '2020-10-31',
#               '2020-11-01', '2020-11-02'],
#              dtype='datetime64[ns]', freq='D')

# columns(列の名前)を準備します。
groups = list('ABCD')
print(groups)
# ['A', 'B', 'C', 'D']

# 2次元配列のデータを生成します。
data = np.random.randn(6, 4)

# 引数にdataとindex, columnsを指定し、DataFrameオブジェクトを生成します。
df = pd.DataFrame(data, index=dates, columns=groups)
print(df)

DataFrameオブジェクトの生成②

辞書型のオブジェクトを引数としてDataFrameを作成することもできます。

df2 = pd.DataFrame({'A': 1.,
                        'B': pd.Timestamp('20201028'),
                        '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'})
print(df2)

このように、DataFrameオブジェクトの各列は異なるデータ型を保持することができます。データ型はobject型となります。

print(df2.dtypes)
# A           float64
# B    datetime64[ns]
# C           float32
# D             int32
# E          category
# F            object
# dtype: object



表示:DataFrameオブジェクトの先頭

DataFrameオブジェクトの冒頭部分を表示します。引数を指定しない場合、最初の5行(インデックス5個分)を表示します。

print(df.head())

表示:DataFrameオブジェクトの末尾

DataFrameオブジェクトの末尾部分を表示します。引数に3を指定しているため、下から3行分(インデックス3個分)表示します。

print(df.tail(3))

表示:index、columnsの表示

インデックスや列名の表示はdf.index、df.columnsで行います。

print(df.index)
# DatetimeIndex(['2020-10-28', '2020-10-29', '2020-10-30', '2020-10-31',
#               '2020-11-01', '2020-11-02'],
#              dtype='datetime64[ns]', freq='D')
print(df.columns)
# Index(['A', 'B', 'C', 'D'], dtype='object')

表示:簡単な統計量

DataFrameオブジェクトに関する簡単な統計量の表示には、df.describe()を使用します。以下のように、個数や平均、標準偏差などの統計量を一度に表示します。

print(df.describe())



numpy表記 (ndarray) への変換

df.to_numpy()でDataFrameからndarrayに変換することができます。

print(df.to_numpy())
# array([[-1.19406929,  0.50361205, -0.24220953,  0.53578441],
#       [ 0.26561919, -0.11158417, -0.19419332,  0.20740461],
#       [-1.3200042 , -1.10399003, -1.21832296, -0.82639353],
#       [-1.6770637 , -0.45470898,  1.81979296, -1.20746169],
#       [ 1.0412805 ,  1.28541185, -0.73853286,  0.92837032],
#       [ 0.32897764, -2.09703734, -0.14191466,  0.49971569]])

ndarrayは1つのデータ型しか保持できませんが、DataFrameは列ごとに異なるデータ型を保持できるという違いがあります。異なるデータ型をもつDataFrameをnumpy表現に変換する場合、dtypeはobject型になります。

print(df2.to_numpy())
# array([[1.0, Timestamp('2020-10-28 00:00:00'), 1.0, 3, 'test', 'foo'],
#       [1.0, Timestamp('2020-10-28 00:00:00'), 1.0, 3, 'train', 'foo'],
#       [1.0, Timestamp('2020-10-28 00:00:00'), 1.0, 3, 'test', 'foo'],
#       [1.0, Timestamp('2020-10-28 00:00:00'), 1.0, 3, 'train', 'foo']],
#      dtype=object)

行と列の変換(転置)

numpy同様、df.Tで行と列を入れ替える操作(転置)が行えます。わざわざto_numpyする必要はありません。

print(df.T)

ソート:index、columnsに沿ったソート

ソートする軸(0ならindex、1ならcolumns)、ascending(Trueなら昇順、Falseなら降順)を指定してソートします。

print(df.sort_index(axis=0, ascending=False))

ソート:行・列名でソート

特定の行(index)、列(columns)でソートします。

print(df.sort_values(by='B', ascending=False))

まとめ

今回は、Pythonによるデータ解析に欠かせないライブラリPandasの使い方を解説しました。SeriesやDataFrameオブジェクトの生成やデータの表示、ソートといった簡単な操作について理解できたかと思います。

次回もPandasの基礎について引き続き解説していきます。

参考書学習は…

Pandasはデータ解析需要の増加に伴い、多数の専門書が刊行されています。必要に応じて書籍を通して学ぶこともデータ解析力の向上には欠かせません。

numpyやpandasを含めて、データサイエンスに必要なライブラリを俯瞰的に詳しく学習したい方は次の書籍がおすすめです。

参考

10 minutes to pandas