pandas.DataFrame, Seriesの先頭・末尾の行を返すheadとtail
行数の多いpandas.DataFrame
, pandas.Series
のデータを確認するときに、先頭(最初)と末尾(最後)の行を返すメソッドhead()
とtail()
が便利。
ここでは、
- 先頭(最初)の行を返す
head()
- 末尾(最後)の行を返す
tail()
- スライスで行番号を指定して行を取得
- 先頭行・最終行の要素を取得
について説明する。
なお、大きいサイズのpandas.DataFrame
, pandas.Series
のデータを確認するときに使えるほかのメソッドとして、ランダムサンプリングするsample()
もある。
例として、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()
先頭(最初)の行を返すのが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
引数に整数を指定するとその分の行が返される。
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
# 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[-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))
# sepal_length sepal_width petal_length petal_width species
# 0 5.1 3.5 1.4 0.2 setosa
print(type(df.head(1)))
# <class 'pandas.core.frame.DataFrame'>
iloc
を使って1行だけを指定すると、指定行をpandas.Series
で取得できる。pandas.Series
のほうが値を取得するのが簡単。iloc[0]
で先頭行、iloc[-1]
で最終行を取得できる。
要素の値を取得したい場合はさらにiloc[0]['列名']
, iloc[-1]['列名']
などのようにすればよい。
print(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
print(type(df.iloc[0]))
# <class 'pandas.core.series.Series'>
print(df.iloc[0]['sepal_length'])
# 5.1
print(df.iloc[-1])
# sepal_length 5.9
# sepal_width 3
# petal_length 5.1
# petal_width 1.8
# species virginica
# Name: 149, dtype: object
print(type(df.iloc[-1]))
# <class 'pandas.core.series.Series'>
print(df.iloc[-1]['sepal_length'])
# 5.9
.iloc
がないとエラーになるので注意。
# print(df[0])
# KeyError: 0
# print(df[-1])
# KeyError: -1
インデックス参照やat
, iat
, loc
, iloc
についての詳細は以下の記事を参照。