Python

Pandasで条件に一致したデータを検索・抽出するサンプルコード

この記事は約6分で読めます。

 

この記事では、Pandasによる条件を指定してのデータ抽出について説明します。

 

1. データフレームの作成

 

まずは、データフレームの作成方法について説明します。以下のように、Pandasモジュールを読み込んで、データを作成します。

 

import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'city': ['Tokyo', 'Osaka', 'Kyoto', 'Nagoya']})

 

上記コードでは、`pd.DataFrame()`関数に辞書型のデータを渡すことで、データフレームを作成しています。データフレームは、左側にインデックス(行名)、上部にカラム(列名)が表示されます。

 

2. 条件を指定してデータ抽出

 

次に、条件を指定してデータを抽出する方法について説明します。以下のように、`data[‘age’] > 30`という条件を指定することで、ageカラムが30より大きいデータを抽出することができます。

 

df[df['age'] > 30]

 

上記のコードを実行すると、以下のような結果が出力されます。

 

name age city
1 Bob 32 Osaka
3 David 47 Nagoya

 

上記の結果から、ageが30より大きい人の名前、年齢、都市が表示されました。

 

3. 複数の条件を指定してのデータ抽出

 

複数の条件を指定してデータを抽出する方法について説明します。以下のように、`&`演算子を使用して、年齢が30より大きく、都市が「Osaka」である人のデータを抽出することができます。

 

df[(df['age'] > 30) & (df['city'] == 'Osaka')]

 

上記のコードを実行すると、以下のような結果が出力されます。

 

name age city
1 Bob 32 Osaka

 

上記の結果から、年齢が30より大きく、都市が「Osaka」である人の名前、年齢、都市が表示されました。

 

また以下のように、`|`演算子を使用して、都市が「Kyoto」または「Nagoya」である人のデータを抽出することができます。

 

df[(df['city'] == 'Kyoto') | (df['city'] == 'Nagoya')]

 

上記のコードを実行すると、以下のような結果が出力されます。

 

name age city
2 Charlie 18 Kyoto
3 David 47 Nagoya

 

上記の結果から、都市が「Kyoto」または「Nagoya」である人の名前、年齢、都市が表示されました。

 

おまけ ~df.query()を用いる場合

 

pandasでの条件を指定の方法には上記のほかにも、「query()」を使用する方法も存在します。

query()を使用する場合は以下のように記述します。

 

“`python
df.query(“条件式”)
“`

 

「query()」では、「条件式」としてPythonの論理式を文字列で指定します。例えば、以下のように記述することで、2021年1月3日以降のデータを抽出することができます。

 

# ageが20以上の行を抽出する
df.query("age >= 20")

 

複数の条件を指定する場合も先ほどと同じように、「&」や「|」を使用します。例えば、以下のように記述することで、2021年1月3日以降のorangeのデータを抽出することができます。

 

# ageが20以上かつ都市が大阪の行を抽出する
df.query("age >= 20 & city == 'Osaka'")

 

4.特定の文字列を含むデータ行を抽出する

 

また、文字列に対しては、「str.contains()」を使用することで、部分一致を用いた抽出ができます。例えば、以下のように記述することで、Productに”apple”が含まれるデータを抽出することができます。

 

df[df["city"].str.contains("Kyoto")]

 

5. applyを使用した詳細な条件指定

 

下記例では、df[“city”]に対してapply関数を使用し、ラムダ関数で”名古屋”を含むデータを抽出しています。その後、df[df[“city”].apply(lambda x: “名古屋” in x)]によって抽出したデータを変数nagoyaに代入しています。

 

df[df["city"].apply(lambda x: "Kyoto" in x)]

 

さらに、年齢が20歳以下の人だけを抽出する場合は以下のようになります。

 

df[df["age"].apply(lambda x: x >= 20)]

 

またapplyとlambdaの真骨頂はデータの検索・抽出ではなく、詳細な条件を指定してデータフレームの要素を置換することにあります。詳しくは下記記事を参考にしてください

 

関連記事:pandasの列データをapplyとlambdaで条件分岐して置換する

 

6. データの型変換

 

最後に、データの型変換について説明します。Pandasは、データを取り扱う際に、データの型を自動的に判定することができます。しかし、データの型が不適切な場合には、明示的に型変換を行う必要があります。

 

まず初期のデータ型は以下の関数で確認することができます

 

print(data.info())

 

以下のように、`data[‘age’]`カラムの型を「int」から「float」に変換する方法を示します。

 

# データ型を変換する
data['age'] = data['age'].astype(float)

# 変換できているか確認
print(data.info())

 

上記のコードを実行すると、`data[‘age’]`カラムのデータ型が「float」に変換されます。

 

関連記事:【Python】pandasで日付データの欠損を補完するサンプルコード

関連記事:【pandas】applymapで一定条件を満たす列にのみ色を付ける

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:Pandasで条件に一致したデータを検索・抽出するサンプルコード […]

  2. […] 関連記事;Pandasで条件に一致したデータを検索・抽出するサンプルコード […]

タイトルとURLをコピーしました