note.nkmk.me

pandas.DataFrame, Seriesの先頭・末尾の行を返すheadとtail

Date: 2018-01-13 / Modified: 2018-02-12 / tags: Python, pandas

行数の多いpandas.DataFrame, pandas.Seriesのデータを確認するときに、先頭(最初)と末尾(最後)の行の要素を返すメソッドhead()tail()が便利。

例として、seabornにサンプルとして含まれているirisデータセットを使う。pandas.DataFrameなのでそのまま使える。

import pandas as pd
import seaborn as sns

df = sns.load_dataset("iris")
print(df.shape)
# (150, 5)

例はpandas.DataFrameだが、pandas.Seriesでもhead()tail()が用意されている。引数など、使い方は同じ。

ここでは、

  • 先頭(最初)の行を返すhead()
  • 末尾(最後)の行を返すtail()
  • スライスで行番号を指定して行を取得
  • 先頭行・最終行の要素を取得

について説明する。

なお、大きいサイズのpandas.DataFrame, pandas.Seriesのデータを確認するときに使えるほかのメソッドとして、ランダムサンプリングするsample()もある。

スポンサーリンク

先頭(最初)の行を返すhead()

先頭(最初)の行を返すのがhead()メソッド。

デフォルトは先頭5行分。

print(df.head())
#    sepal_length  sepal_width  petal_length  petal_width species
# 0           5.1          3.5           1.4          0.2  setosa
# 1           4.9          3.0           1.4          0.2  setosa
# 2           4.7          3.2           1.3          0.2  setosa
# 3           4.6          3.1           1.5          0.2  setosa
# 4           5.0          3.6           1.4          0.2  setosa

引数に整数を指定するとその分の行が返される。

# (150, 5)

print(df.head())
#    sepal_length  sepal_width  petal_length  petal_width species
# 0           5.1          3.5           1.4          0.2  setosa
# 1           4.9          3.0           1.4          0.2  setosa
# 2           4.7          3.2           1.3          0.2  setosa
# 3           4.6          3.1           1.5          0.2  setosa
# 4           5.0          3.6           1.4          0.2  setosa

print(df.head(3))
#    sepal_length  sepal_width  petal_length  petal_width species
# 0           5.1          3.5           1.4          0.2  setosa
# 1           4.9          3.0           1.4          0.2  setosa
# 2           4.7          3.2           1.3          0.2  setosa

末尾(最後)の行を返すtail()

末尾(最後)の行を返すのがtail()メソッド。

デフォルトは末尾5行分。

print(df.tail())
#      sepal_length  sepal_width  petal_length  petal_width    species
# 145           6.7          3.0           5.2          2.3  virginica
# 146           6.3          2.5           5.0          1.9  virginica
# 147           6.5          3.0           5.2          2.0  virginica
# 148           6.2          3.4           5.4          2.3  virginica
# 149           5.9          3.0           5.1          1.8  virginica

引数に整数を指定するとその分の行が返される。

print(df.tail(3))
#      sepal_length  sepal_width  petal_length  petal_width    species
# 147           6.5          3.0           5.2          2.0  virginica
# 148           6.2          3.4           5.4          2.3  virginica
# 149           5.9          3.0           5.1          1.8  virginica

スライスで行番号を指定して取得

スライスで行番号を指定して任意の位置の行の要素を取得することもできる。

print(df[50:55])
#     sepal_length  sepal_width  petal_length  petal_width     species
# 50           7.0          3.2           4.7          1.4  versicolor
# 51           6.4          3.2           4.5          1.5  versicolor
# 52           6.9          3.1           4.9          1.5  versicolor
# 53           5.5          2.3           4.0          1.3  versicolor
# 54           6.5          2.8           4.6          1.5  versicolor

スライスを使ってhead()tail()と同様のこともできる。

print(df[-5:])
#      sepal_length  sepal_width  petal_length  petal_width    species
# 145           6.7          3.0           5.2          2.3  virginica
# 146           6.3          2.5           5.0          1.9  virginica
# 147           6.5          3.0           5.2          2.0  virginica
# 148           6.2          3.4           5.4          2.3  virginica
# 149           5.9          3.0           5.1          1.8  virginica

先頭行・最終行の要素の値を取得

head()tail()に引数n=1を指定すると先頭行または最終行を取得できるが、一行だけでも型はpandas.DataFrame

print(df.head(1))
print(type(df.head(1)))
#    sepal_length  sepal_width  petal_length  petal_width species
# 0           5.1          3.5           1.4          0.2  setosa
# <class 'pandas.core.frame.DataFrame'>

ilocを使うと指定行をpandas.Seriesで取得できる。pandas.Seriesのほうが各列の値を取得するのが簡単。iloc[0]で先頭行、iloc[-1]で最終行を取得できる。

print(df.iloc[0])
print(type(df.iloc[0]))
# sepal_length       5.1
# sepal_width        3.5
# petal_length       1.4
# petal_width        0.2
# species         setosa
# Name: 0, dtype: object
# <class 'pandas.core.series.Series'>

print(df.iloc[0]['sepal_length'])
# 5.1

print(df.iloc[-1])
print(type(df.iloc[-1]))
# sepal_length          5.9
# sepal_width             3
# petal_length          5.1
# petal_width           1.8
# species         virginica
# Name: 149, dtype: object
# <class 'pandas.core.series.Series'>

print(df.iloc[-1]['sepal_length'])
# 5.9

特定の列の先頭行・最終行の値を取得したい場合は、以下のような書き方もできる。

df['xxx'][-1]は行名が整数値の場合エラーになるので注意(行名が整数値でなければエラーにはならない)。valuesを使えば行名の型によらず先頭行・最終行の値を取得できる。

print(df['sepal_length'][0])
# 5.1

# print(df['sepal_length'][-1])
# KeyError

print(df['sepal_length'].iat[-1])
# 5.9

print(df['sepal_length'].values[0])
# 5.1

print(df['sepal_length'].values[-1])
# 5.9

インデックス参照やat, iat, loc, ilocについての詳細は以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事