はじめに
Pythonでデータを取得する際、
Pandasのライブラリを頻繁に利用します。
ところが、データ分析の初心者は、
- どのようにデータを取得すればよいか、イメージできない
- どのメソッドを利用すればよいか不明
という状況にわりとなります。
この記事では、
データを抽出時に頻出のメソッドをまとめてみました。
※ 主にこれからPythonを学習される方向けの記事となっています。
※ 細かい点については、公式ドキュメントにて、ご確認ください。
環境
- Python 3.7.6
- Pandas 1.0.0
Pandasとは?
データ分析を効率的に行うため、Pythonのライブラリの一つです。
実装
必要なデータの読み込み
今回は、seabornで標準利用が可能な「iris」のデータセットを利用します。
import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()
行列を指定してデータを抽出する
行番号や列番号を指定することで、自由にデータを取得できます。
行番号を指定したデータ抽出
# 3行目のデータ
iris.iloc[3]
ilocでは、行番号を指定することでデータを取得できます。
# 0〜2行目のデータ
iris.iloc[:3]
# 3行目 1列目の値
iris.iloc[3, 0]
# 0〜2行目、2列目〜3列目のデータ
iris.iloc[:3, 2:4]
行番号、列名を指定し、データを抽出する
iris.loc[[2,4,6],['petal_length', 'petal_width']]
locでは、行インデックスを指摘することで、データを取得できます。
特定条件のデータを抽出する
条件を指定して、データを抽出する方法は、以下のとおりです。
完全一致条件によるデータ抽出
speciesの項目について、内容が、setosa
と一致する件数を取得します。
len(iris[iris['species'] == 'setosa'])
複数条件を使ったデータ抽出
データ抽出する際、複数条件で絞りたい場合は、条件を付与することで実現できます。
# and条件は()&()で、or条件は()|()
iris[(iris['species'] == 'setosa') & (iris['petal_width'] > 0.5)]
部分一致条件によるデータ抽出
条件は、完全一致だけでなく、部分一致した内容を抽出したいケースもあり、このような場合は、以下の内容で実現できます。
# 部分一致検索(seと部分一致するもののみ抽出する)
iris[iris.species.str.contains('se')]
データを集計する
集計時は、DataFrameGroupBy型に変換した上で、加工します。
iris_group = iris.groupby('species')
type(iris_group)
出力結果は、以下のとおりです。
pandas.core.groupby.generic.DataFrameGroupBy
平均値
iris_group.mean()
出力イメージは、以下のとおりです。
他にも、最小値、最大値、標準偏差なども算出できます。
複数条件による、集計も可能です。
iris_group2 = iris.groupby(['species', 'petal_width'])
iris_group2.mean()
データを結合する
同じカラム構成のデータを結合する
同じカラム構成となっている、データを結合する場合、appendメソッド、または、concatメソッドを利用します。
今回は、Panadasメソッドを中心に説明しているので、concatメソッドで結合します。
import pandas as pd
iris_master = pd.DataFrame([['0', 'setosa'], ['1', 'versicolor'], ['2', 'virginica']], columns=['id', 'name'])
iris_master
add_iris = pd.DataFrame([['3', 'hoge']], columns=['id', 'name'])
add_iris
pd.concat([iris_master, add_iris])
異なるカラム構成のデータを結合する
データのカラム構成が異なる、複数のデータを結合する場合、mergeメソッドを利用します。
(他にもjoinメソッドでも結合は可能ですが、キーにしたい列をindexにする必要があり、少し面倒なので、まずはmergeメソッドが利用できるれば、問題ないかと考えています。)
結合する際は、結合するためのキー項目を指定することで、
同じ項目同士で行を結合します。
pd.merge(iris_group2.mean(), iris_master, left_on='species', right_on='name')
最後に
今後、以下の内容について充実させる予定です。
- データの読み込み(read_csv)
参考情報
上記内容は、以下のサイトをベースにまとめました。
こちらでは、より細かく説明されているので、不明な点があれば、ぜひ参考にしてください。