プログラミング

【Python】pandasで必要なデータを抽出する【チートシート】

pandasのチートシートです。

pandasで必要なデータを抽出するときに使用する関数や方法をまとめてみました。

ビッグデータになるとデータ全体が見えないことがあるため、特定の範囲のデータを抜き出すことが必要になってきます。

特定の範囲のデータを抜き出すことを抽出といいます。

データの解析をスムーズに行うためにデータの抽出方法は慣れておくと良いです。

今回も各関数の詳細は公式ドキュメントを参考にしています。

その他引数や詳細な操作などは公式ドキュメンをご参考ください。

pandas documentation Version: 1.2.2

今回もGoogle Colaboratoryにもともと入っているカリフォルニアの住宅情報のデータを使ってやっていきます。データの読み込みについては過去の記事でも紹介していますのでそちらを参考にしてください。

過去の記事→【Python】pandasでファイルを読み書きする手法【チートシート】

import pandas as pd
df = pd.read_csv('/content/sample_data/california_housing_test.csv')

行データを抽出する

行データを抽出するにはスライスで指定するかもしくはiloc,  locを使います。ilocは数値で行を指定、locは文字列で行を指定できます。

df[:]

df[]の中にスライスで始点と終点を指定することで行を抽出することができます。

df[1:3]
>>>
longitude  latitude  ...  median_income  median_house_value
1    -118.30     34.26  ...         3.5990            176500.0
2    -117.81     33.78  ...         5.7934            270500.0

iloc

ilocは数値で行や列を指定できます。入力の手間が少ないですが、列の挿入や削除などで順番が狂う可能性があるのが難点です。違うデータフレームでも同様の操作を行う必要がある場合は後述のlocを使う方が安全です。

数値が一つの場合はSeriesになります。


df.iloc
longitude               -118.3600
latitude                  33.8200
housing_median_age        28.0000
total_rooms               67.0000
total_bedrooms            15.0000
population                49.0000
households                11.0000
median_income              6.1359
median_house_value    330000.0000
Name: 3, dtype: float64

複数行抽出する場合はスライスを使います。この場合はDataFrameになります。

df.iloc
   longitude  latitude  ...  median_income  median_house_value
3    -118.36     33.82  ...         6.1359            330000.0
4    -119.67     36.33  ...         2.9375             81700.0

loc

locは文字列で行や列を指定できます。ilocではデータの挿入や削除によって抽出するデータがズレる可能性がありますが、locで文字列で指定すれば、特定の行や列で抽出が可能です。

今回はindexが数値なのでilocとlocは同じコマンドになります。

df.loc

列データを抽出する

列データはiloc、locでも抽出できますが、より簡単な方法あります。

df[‘列名’]

データフレームから’latitude’の列を抽出します。

df['latitude']
0       37.37
1       34.26
2       33.78
3       33.82
4       36.33
        ...  
2995    34.42
2996    34.06
2997    36.30
2998    34.10
2999    34.42
Name: latitude, Length: 3000, dtype: float64

列名をリストにすることで複数の列を抽出できます。

df[['latitude', 'total_rooms', 'population']]
>>>
      latitude  total_rooms  population
0        37.37       3885.0      1537.0
1        34.26       1510.0       809.0
2        33.78       3589.0      1484.0
3        33.82         67.0        49.0
4        36.33       1241.0       850.0
...        ...          ...         ...
2995     34.42       1450.0      1258.0
2996     34.06       5257.0      3496.0
2997     36.30        956.0       693.0
2998     34.10         96.0        46.0
2999     34.42       1765.0       753.0

df[‘列名’]の場合はスライスを使用することができません。理由はスライスを使うと行として認識されるためです。スライスを使って行を抽出する場合は後述のlocやilocが便利です。

iloc

ilocを使って列を抽出する場合は、列だけでも行数を指定する必要があります。

df.iloc[:, 1]
>>>
0       37.37
1       34.26
2       33.78
3       33.82
4       36.33
        ...  
2995    34.42
2996    34.06
2997    36.30
2998    34.10
2999    34.42
Name: latitude, Length: 3000, dtype: float64

前半の’:’は行全体を意味します。特定の範囲を抽出したい場合はスライスで始点と終点を指定できます。

df.iloc[2:4, 1]
>>>
2    33.78
3    33.82
Name: latitude, dtype: float64

loc

locは文字列になったバージョンで、ilocと同じ使い方です。文字列でスライスが使えるため、非常に便利です。

df.loc[:, 'latitude':'total_rooms']
>>>
      latitude  housing_median_age  total_rooms
0        37.37                27.0       3885.0
1        34.26                43.0       1510.0
2        33.78                27.0       3589.0
3        33.82                28.0         67.0
4        36.33                19.0       1241.0
...        ...                 ...          ...
2995     34.42                23.0       1450.0
2996     34.06                27.0       5257.0
2997     36.30                10.0        956.0
2998     34.10                40.0         96.0
2999     34.42                42.0       1765.0

まとめ

ポイント
  • df[]の中にスライスを使うと行、使わない場合は列を抽出できる
  • 特定の範囲の行列を抽出する時はlocまたはilocを使う

で良いかと思います。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です