ホーム > python > pandas > pandas.DataFrameの行・列データを取得

pandas.DataFrameの行・列データを取得

pythonpandas

環境

今回動作の確認を行った際のバージョンは下記の通り
python:3.10.9
pandas:1.5.3
データセット:scikit-learnのirisを使用(scikit-learnは1.2.2)


データセットの準備

前回と同じirisデータセットを使用して動作を確認していきます。

from sklearn.datasets import load_iris
if __name__ == '__main__':
df = load_iris(as_frame=True).frame
print(df.head())
# sepal length (cm) sepal width (cm) ... petal width (cm) target
# 0 5.1 3.5 ... 0.2 0
# 1 4.9 3.0 ... 0.2 0
# 2 4.7 3.2 ... 0.2 0
# 3 4.6 3.1 ... 0.2 0
# 4 5.0 3.6 ... 0.2 0
# [5 rows x 5 columns]


列データ取得

pandas.DataFrameでは列名を指定することで指定列のデータを取得することが出来ます。
単独の列を指定した場合pandas.Series、複数の列を指定した場合pandas.DataFrame形式でデータを取得することが出来ます。
今回は「df.columns」を使って列名の一覧を取得し、それを用いて列データを取得します。

from sklearn.datasets import load_iris
if __name__ == '__main__':
df = load_iris(as_frame=True).frame
# 列名をindexオブジェクトとして取得
col_list = df.columns
print(col_list)
# Index(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)',
# 'petal width (cm)', 'target'],
# dtype='object')
# インデックスオブジェクトの先頭(sepal length (cm))列のデータを取得
print(df[col_list[0]])
# 0 5.1
# 1 4.9
# 2 4.7
# 3 4.6
# 4 5.0
# ...
# 145 6.7
# 146 6.3
# 147 6.5
# 148 6.2
# 149 5.9
# Name: sepal length (cm), Length: 150, dtype: float64
# データ型確認
print(type(df[col_list[0]]))
# <class 'pandas.core.series.Series'>
# インデックスオブジェクトの1、2列目(sepal length (cm)、sepal width (cm))のデータを取得
print(df[col_list[0:2]])
# sepal length (cm) sepal width (cm)
# 0 5.1 3.5
# 1 4.9 3.0
# 2 4.7 3.2
# 3 4.6 3.1
# 4 5.0 3.6
# .. ... ...
# 145 6.7 3.0
# 146 6.3 2.5
# 147 6.5 3.0
# 148 6.2 3.4
# 149 5.9 3.0
#
# [150 rows x 2 columns]
# データ型確認
print(type(df[col_list[0:2]]))
# <class 'pandas.core.frame.DataFrame'>

また、pandas.DataFrame.locを使用しても同様にデータを取得することが可能です。

from sklearn.datasets import load_iris
if __name__ == '__main__':
df = load_iris(as_frame=True).frame
# 列名をindexオブジェクトとして取得
col_list = df.columns
print(col_list)
# Index(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)',
# 'petal width (cm)', 'target'],
# dtype='object')
# インデックスオブジェクトの先頭(sepal length (cm))列のデータを取得
print(df.loc[:, col_list[0]])
# 0 5.1
# 1 4.9
# 2 4.7
# 3 4.6
# 4 5.0
# ...
# 145 6.7
# 146 6.3
# 147 6.5
# 148 6.2
# 149 5.9
# Name: sepal length (cm), Length: 150, dtype: float64
# データ型確認
print(type(df.loc[:, col_list[0]]))
# <class 'pandas.core.series.Series'>
# インデックスオブジェクトの1、2列目(sepal length (cm)、sepal width (cm))のデータを取得
print(df.loc[:, col_list[0:2]])
# sepal length (cm) sepal width (cm)
# 0 5.1 3.5
# 1 4.9 3.0
# 2 4.7 3.2
# 3 4.6 3.1
# 4 5.0 3.6
# .. ... ...
# 145 6.7 3.0
# 146 6.3 2.5
# 147 6.5 3.0
# 148 6.2 3.4
# 149 5.9 3.0
#
# [150 rows x 2 columns]
# データ型確認
print(type(df.loc[:, col_list[0:2]]))
# <class 'pandas.core.frame.DataFrame'>


行データ取得

行番号または行名を指定することで任意の行のデータを取得することが可能です。
リストと同じようにマイナスの値を指定することで開始行を後ろの行から開始したり、[開始行:終了行:ステップ数]と指定することでデータ取得間隔を指定することが可能です。

from sklearn.datasets import load_iris
if __name__ == '__main__':
df = load_iris(as_frame=True).frame
# 先頭5行分のデータ取得
print(df[0:5])
# sepal length (cm) sepal width (cm) ... petal width (cm) target
# 0 5.1 3.5 ... 0.2 0
# 1 4.9 3.0 ... 0.2 0
# 2 4.7 3.2 ... 0.2 0
# 3 4.6 3.1 ... 0.2 0
# 4 5.0 3.6 ... 0.2 0
#
# [5 rows x 5 columns]
# 最後5行分のデータ取得
print(df[-5:])
# sepal length (cm) sepal width (cm) ... petal width (cm) target
# 145 6.7 3.0 ... 2.3 2
# 146 6.3 2.5 ... 1.9 2
# 147 6.5 3.0 ... 2.0 2
# 148 6.2 3.4 ... 2.3 2
# 149 5.9 3.0 ... 1.8 2
#
# [5 rows x 5 columns]
# 最後10行のうち偶数業のデータのみ取得
print(df[0:10:2])
# sepal length (cm) sepal width (cm) ... petal width (cm) target
# 0 5.1 3.5 ... 0.2 0
# 2 4.7 3.2 ... 0.2 0
# 4 5.0 3.6 ... 0.2 0
# 6 4.6 3.4 ... 0.3 0
# 8 4.4 2.9 ... 0.2 0
#
# [5 rows x 5 columns]