【Python】特定のデータを抽出する方法2選【データ分析】

データフレームから、特定のデータだけを抽出したいんだけど、pythonでどうやってコーディングしたらいいかわからないよ…。


本記事では、データの抽出方法について、データ分析初心者向けに、わかりやすく解説します。


Pythonでデータ分析をしたい方や、データ前処理で困っている方は、ぜひ御覧ください。

データフレームから特定のデータを抽出

データフレームから、条件を指定してデータを抽出したい場合はfilterメソッド、または、queryメソッドを使います。



列名・行名を指定してデータを抽出【filterメソッド】

filterメソッドでは、列名や行名を指定してデータを抽出することができます

列or行を指定する時は、axisを使います。

・行のことを指定したい時は、axis=0
・列のことを指定したい時は、axis=1

デフォルトはaxis=1(列)になっているので、行を指定したい時のみaxisを指定しましょう。



指定した文字と完全一致した列名・行名を抽出

オプションでitemsを指定することで、完全一致した項目を取得します。

列名で取得する時は、items=[‘抽出したい列名’]で指定します。


[‘〇〇’,’△△’,’✕✕’]というように、カンマで区切ることで複数項目を取得することができます。

#指定した文字と完全一致した列名を取得
df.filter(items=['I411102_身長(小学5年)(女)【cm】'])


items指定の実行結果




itemsは項目名と完全一致する必要があるため、該当する項目名がない場合は次のように表示されます。

#指定した項目名が存在しない場合
df.filter(items=['I411102_身長(小学5年)(女)【cm'])



「この項目名に該当する項目はないよ」ってことだね!



指定した文字と部分一致した列名・行名を抽出

部分一致の列名や行名を取得したい場合は、likeを使いましょう。



下記の例では、「身長」という文字列が入っている項目を取得できます。

#指定した文字と部分一致した項目を抽出
df.filter(like='身長')
likeの実行結果





次に、部分一致した行名を抽出してみましょう。


行名が数字でも文字として扱うことがポイントです。

#行名の部分一致
df.filter(like='5',axis=0)
likeの実行結果



条件式でデータを抽出する【queryメソッド】

条件式を指定してデータを抽出したい場合は、qureyメソッドを使います。


今回のデータは、項目名に全角括弧「(」が入っていて、SyntaxErrorが発生してしまいます。
なので、項目名を変更しました。

#項目名を変更
df_new = df.rename(columns = {'I411101_身長(小学5年)(男)【cm】':'I411101'})



#140以上の行を抽出
df_new.query('I411101 >= 140')
queryメソッド



条件式の組み方については、Python基礎まとめ編を参照してください。

【Python入門】基礎文法を初心者向けに徹底解説【データサイエンス入門】

2022年6月4日



スライスして抽出

スライスとは、リストやデータフレームなどのまとまったデータの一部を切り取って抽出する方法のことです。

言葉の通り、データをスライスしたイメージだね!


スライスの場合は、locメソッドを使います。


なお、スライスでもfilterやqueryを使ったときと同様に抽出できますが、filterやqueryの方が簡単にデータを抽出できるので、おすすめです。



とはいえ、スライスはいろんな場面で使うことが多いので、知っておくと便利です




行列名を指定してデータ抽出

行名や列名を指定して、スライスすることもできます。


まとめると、次の通りです。

スライスの図解



列名の指定

列名を指定する時は、df[‘列名’]です。

#列名で指定する
df['I411101_身長(小学5年)(男)【cm】']
スライス1




行名の指定

行名で指定する場合は、df.loc[行名]です。



下記の例では、2行目が抽出されます。

#行名を指定する
df.loc[2]


スライス2



範囲を指定してデータ抽出

続いて、範囲を指定して一区間をスライスする方法です。


locメソッドを使います。

列単位で取得


まず、列単位で取得してみましょう。

列の範囲指定をする





今回は、体重に関するデータをがっぽり抽出したいとします。

体重関連の項目名を抽出



#範囲を指定してデータを抽出する
df.loc[:,"I412101_体重(小学5年)(男)【kg】":"I412302_体重(高校2年)(女)【kg】"]

体重のデータを全行分取得






行単位で取得

行の場合も、列の場合と同様に、最初の行名と最後の行名を指定することで、簡単にデータを取得できます

#行の範囲を指定してデータを抽出する(5行目〜10行目の全列を抽出)
df.loc[5:10,:]
行単位で取得



最後に

Pythonでデータ分析・データサイエンスをしたい初心者向けに、Pythonデータ分析徹底解説総まとめページを作成しました。


流れに沿って実装することで、データ分析の基礎が固められます。

【総集編】データ前処理をPythonで実装【機械学習入門】

2022年9月25日




また、専門の講師と一緒に挫折せずに学習したい方は、データサイエンススクールがおすすめです。

こちらもぜひ御覧ください。

【2023年最新版】データサイエンスが学べるおすすめスクール5選

2022年6月4日