【はじめに】
データ加工やデータ分析、機械学習の領域においてはデータを操作することが多いです。
今回は、Pythonライブラリの「Pandas」の中でも、行と列のデータを取得する方法として、「loc」と「iloc」について使い方を紹介していきます。
本記事の内容
- pandasのインポート
- csvファイルの読み込み
- データ型を調べる
- 行数、列数を取得する
- 列を取得する
- 行と列を取得する:loc()
- 列を取得する:iloc()
【pandasのインポート】
import pandas as pd
【csvファイルの読み込み】
「1920年から2015年までの全国の人口推移のデータ」を使用します。
df = pd.read_csv('data.csv', encoding='shift-jis')
df
私のGitHubに「nikkei.csv」としてアップロードしてあるので、下記コマンドでダウンロードすれば簡単に準備できます。
$ curl https://raw.githubusercontent.com/nakachan-ing/python-references/master/Pandas/data.csv -O
【データ型を調べる】
列ごとのデータ型をdtypes
属性で調べることができます。
df.dtypes
都道府県コード int64
都道府県名 object
元号 object
和暦(年) float64
西暦(年) float64
人口(総数) int64
人口(男) int64
人口(女) int64
dtype: object
【行数、列数を取得する】
shape
属性で行数と列数をまとめて取得することができます。
df.shape
# (行数, 列数)
(939, 8)
【列を取得する】
データフレームからカラム名を指定して、シリーズ(Series)として取得します。
series_population = df['人口(総数)']
series_population
0 2359183
1 756454
2 845540
3 961768
4 898537
...
934 1786170
935 1166338
936 1104069
937 1648177
938 1433566
Name: 人口(総数), Length: 939, dtype: int64
type(series_population)
pandas.core.series.Series
ポイント
-
df['カラム名']
でカラム名に対するデータを取得できます。 - 取得したデータを
type()
で確認すると、Series
であることが確認できます。
df_population = df[['人口(総数)']]
df_population
- 二重括弧[[]]でカラム名を指定することで、データフレームとして取得することができます。
type(df_population)
pandas.core.frame.DataFrame
df_population_by_gender = df[['人口(男)', '人口(女)']]
df_population_by_gender
- 二重括弧内にコンマ続きでカラム名を指定すると、複数の列を取得することができます。
【行と列を取得する:loc()】
行や列のラベルを指定して値を取得します。
df.head(10)
# dfの中から行のインデックスが「9」のデータ(都道府県が群馬)を取得する
df.loc[9]
都道府県コード 10
都道府県名 群馬県
元号 大正
和暦(年) 9.0
西暦(年) 1920.0
人口(総数) 1052610
人口(男) 514106
人口(女) 538504
Name: 9, dtype: object
ポイント
-
loc[]
の角括弧内には、行、列の順番で指定します。
# dfの中から行のインデックスが「9」、カラム名が「都道府県名」のデータを取得する
df.loc[9, '都道府県名']
'群馬県'
-
loc[]
を使用して列を取得することもできます。 - 行にコロンを指定すると「全ての行」を意味します。
- 列(カラム)の指定するときに角括弧内にコンマ続きでカラムを指定すると、複数の列を取得することができます。
df.loc[:, ['人口(総数)', '人口(男)', '人口(女)']]
- 連続する複数の列(カラム)の値を取得する場合、取得したい両端のカラム名をコロンで繋ぐと同様に取得することができます。
df.loc[:, '人口(総数)':'人口(女)']
【列を取得する:iloc()】
iloc[]
を使用すると、列(カラム)を列番号で指定することができます。
# 人口(総数)の列番号は「5」、人口(女)の列番号は「7」のため、「5:8(7+1)」と列番号を指定する
df.iloc[:, 5:8]
ポイント
- 列番号は「0」から始まります。
- 連続する複数の列(カラム)の値を取得する場合、カラム名の代わりに列番号をコンマで繋ぎます。
- ただし、コンマの後ろの列番号の手前までを取得するため、「+1」した列番号を指定します。
- 列番号を取得するには、
columns.get_loc()
を使用します。
df.columns.get_loc('人口(総数)')
5
【おわりに】
今回は、Pandasで行と列のデータを取得する方法として「loc」と「iloc」を紹介しました。
Pandasを使いこなすには練習あるのみです。
今回、使用したCSVファイルやJupyter NotebookはGitHubに公開しています。
Jupyter Notebookは下記コマンドでダウンロードできるので、自由に使って是非練習してみてください。
$ curl https://raw.githubusercontent.com/nakachan-ing/python-references/master/Pandas/pandasでデータを操作する.ipynb -O