3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Pandas】行と列のデータを取得する方法 | loc/iloc

Last updated at Posted at 2022-06-20

【はじめに】

データ加工やデータ分析、機械学習の領域においてはデータを操作することが多いです。

今回は、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

Image from Gyazo

私の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

Image from Gyazo

  • 二重括弧[[]]でカラム名を指定することで、データフレームとして取得することができます。
type(df_population)
pandas.core.frame.DataFrame
df_population_by_gender = df[['人口(男)', '人口(女)']]
df_population_by_gender

Image from Gyazo

  • 二重括弧内にコンマ続きでカラム名を指定すると、複数の列を取得することができます。

【行と列を取得する:loc()】

行や列のラベルを指定して値を取得します。

df.head(10)

Image from Gyazo

# 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[:, ['人口(総数)', '人口(男)', '人口(女)']]

Image from Gyazo

  • 連続する複数の列(カラム)の値を取得する場合、取得したい両端のカラム名をコロンで繋ぐと同様に取得することができます。
df.loc[:, '人口(総数)':'人口(女)']

Image from Gyazo

【列を取得する:iloc()】

iloc[]を使用すると、列(カラム)を列番号で指定することができます。

# 人口(総数)の列番号は「5」、人口(女)の列番号は「7」のため、「5:8(7+1)」と列番号を指定する
df.iloc[:, 5:8]

Image from Gyazo

ポイント

  • 列番号は「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

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?