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

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

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

Pandas公式の10 minutes to pandasを参考に進めている本シリーズ、第1回【Python】データ解析に欠かせない!Pandasの使い方①からご覧いただくとスムーズに理解できるかと思います。

今回は主にPandasのDataFrameオブジェクトにおける「データの選択」の仕方を解説します。マスターしてDataFrameオブジェクト内のデータを自由に選択できるようになりましょう。

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



Pandasの使い方②

第1回の続きとして、引き続き以下のDataFrameオブジェクトを使用します。

import pandas as pd
import numpy as np

dates = pd.date_range('20201028', periods=6)
groups=list('ABCD')
data = np.random.randn(6, 4)
df = pd.DataFrame(data, index=dates, columns=groups)
print(df)

データの選択:列名(columns)の指定

特定の列、例えば”A”列を指定したい場合はdf[“A”]あるいはdf.Aとします。

df["A"]
# 2020-10-28    0.676457
# 2020-10-29   -0.069119
# 2020-10-30    0.433596
# 2020-10-31   -0.235744
# 2020-11-01   -0.429983
# 2020-11-02   -1.354945
# Freq: D, Name: A, dtype: float64

df.B
# 2020-10-28   -1.215940
# 2020-10-29   -0.127517
# 2020-10-30    1.449953
# 2020-10-31   -0.025499
# 2020-11-01    0.314057
# 2020-11-02    0.684319
# Freq: D, Name: B, dtype: float64

データの選択:スライスによる行(index番号)の指定

通常のPythonのリストのように、スライスによる行の選択も可能です。

df[0:3]

あるいはindexとしている日付でスライスすることも可能です。

df['20201029':'20201031']

データの選択:ラベルによる選択 df.loc

ラベルによる選択にはdf.locを使用します。まずはindexのラベルを選択する例です。

df.loc[dates[0]]
# A    0.676457
# B   -1.215940
# C    0.974159
# D    0.069213
# Name: 2020-10-28 00:00:00, dtype: float64

複数のラベルを選択することも可能です。次の例では、列のラベル”B”,”D”に該当する全てのindexのデータを選択します。

df.loc[:,["B","D"]]

indexとcolumnsの指定を組み合わせることで柔軟にデータを選択することができます。

df.loc[[dates[0],dates[2]],["B","D"]]

特定の1つのデータを指定することも可能です。

df.loc['2020-11-01',"C"]
# 0.41425473118478345

特定のデータの取得にはdf.atを使用することも可能で、こちらの方が高速に実行できます。

df.at['2020-11-01',"C"]
# 0.41425473118478345



データの選択:行・列番号の指定による選択 df.iloc

df.ilocを使うと、numpyの多次元配列のように数値で行・列を指定して選択することも可能です。次の例では2行目を選択しています。

df.iloc[2]
# A    0.433596
# B    1.449953
# C    0.384210
# D    1.725578
# Name: 2020-10-30 00:00:00, dtype: float64

スライスによる選択も可能です。

df.iloc[0:3,2:4]

リストを使用すれば飛び地の選択も可能です

df.iloc[[2, 4],[1,3]]

行(列)の番号を指定し、その全ての列(行)を指定したい場合もnumpy同様です。

df.iloc[1:4,:]

特定の1つのデータを指定することも可能です。

df.iloc[1,2]
# 0.7357590805530372

特定のデータの取得には、df.iatを使用することで高速に実行できます。

df.iat[1,2]
# 0.7357590805530372



まとめ

今回は、Pythonによるデータ解析に欠かせないライブラリPandasの使い方を解説しました。第2回として、スライスやラベルの指定によるデータ選択のやり方について学ぶことができたのではないかと思います。

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

参考書学習は…

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

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

参考

10 minutes to pandas