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

行数の多い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()メソッド。

pandas.DataFrame.head — pandas 0.22.0 documentation

デフォルトは先頭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()メソッド。

pandas.DataFrame.tail — pandas 0.22.0 documentation

デフォルトは末尾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についての詳細は以下の記事を参照。

シェア

関連カテゴリー

Python pandas

pandasで複数条件のand, or, notから行を抽出(選択) pandas-datareaderで株価や人口のデータを取得 pandas.DataFrameの行番号、列番号を取得 pandas.DataFrameの行と列を入れ替える(転置) pandas.DataFrameの行名・列名の変更 Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) pandas.DataFrameの構造とその作成方法 pandasで中央値を取得するmedian pandas.Seriesのmapメソッドで列の要素を置換 pandas.DataFrame, Seriesを連結するconcat pandas.DataFrameをJSON文字列・ファイルに変換・保存(to_json) pandas.DataFrame, Seriesをソートするsort_values, sort_index pandasの時系列データのタイムゾーンを処理(tz_convert, tz_localize) pandasで最大値・最小値の行名・列名を取得するidxmax, idxmin pandasからNumPyの関数などを使う方法(pd.np)

Last Updated: 6/26/2019, 10:34:03 PM