pandasのチートシートです。
pandasで必要なデータを抽出するときに使用する関数や方法をまとめてみました。
ビッグデータになるとデータ全体が見えないことがあるため、特定の範囲のデータを抜き出すことが必要になってきます。
特定の範囲のデータを抜き出すことを抽出といいます。
データの解析をスムーズに行うためにデータの抽出方法は慣れておくと良いです。
今回も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を使う
で良いかと思います。