( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】DataFrameで行数・列数を確認する方法|shape

DataFrameで行数・列数を確認する方法

今回はshapeを利用してDataFrameの行数・列数を確認する方法をご紹介します

Pythonでは大量のデータを高速で処理できる反面、どのくらいデータが入っているか分かりにくいという欠点があります

また集計や結合の処理を実施していくと、行数や列数はどんどん増えていきます

思わぬ形でデータが増減する場合もあるため、注意が必要になります

ミスを防ぐという意味でもshapeを活用し、データの行数・列数を確認しましょう

Pythonで行数・列数を取得するshapeのイメージ
MEMO

column:カラム」や「index:インデックス」は対象外となるのでご注意してください

事前準備

Seabornというライブラリから、タイタニック号のデータを取得しておきます

またPandasも合わせてインポートしておきます

import seaborn as sns
import pandas as pd
df = sns.load_dataset('titanic')
df.head()
sns.load_dataset('titanic')
【Python】初心者向けタイタニック号のサンプルデータをご紹介します

shapeの使い方

shapeを利用することで、行数・列数を簡単に取得することができます

事前準備で設定した変数(df)に対して実施します

df.shape

行数(891)と列数(15)が表示されました

行数→列数の順にデータが表示されるため、順番は覚えておきましょう

Pythonで行数・列数を取得するshapeのイメージ

データ処理前後で行数・列数を取得する

printを利用することで、処理の途中でも行数・列数を表示させることができます

この機能を利用して複雑なデータ処理の前後で、行数・列数が変化したかどうかを把握しましょう

※タイタニック号のデータを「男性」「女性」で分割した後に、改めて結合します

#変数(df)の行数・列数を取得
print(df.shape)

#男性と女性を分ける
male   = df.query('sex=="male"')
female = df.query('sex=="female"')

#変数(male/female)の行数・列数を取得
print('男性'+str(male.shape))
print('女性'+str(female.shape))
printでshapeを出すイメージ

「男性」「女性」ごとに変数を用意し、printを使ってそのタイミングでの行数・列数を取得しています

891行あったデータを2分割して、「男性=577」「女性=314」に分かれたことが分かります

MEMO

「男性」「女性」という文字列と同時にprintで出力するため、strを利用し文字列型へ変換しています

単体の数値として取得する

shapeで取り出した行数・列数は、単体の数値として利用することができます

列数を取得するには[0]を付けて、行数を取得するには[1]を付けましょう

male.shape[0]
male.shape[0]

ilocを組み合わせて利用する

この行・列の数値のみilocと組み合わせて、データを自在に取得することができるのでご紹介します

「行の始めから終わり」と「列の始めから終わり」までを指定することで、DataFrameからデータを取得することができます

ilocの利用イメージ

まずはconcatを使って「男性:male」と「女性:female」を縦に結合します

そしてilocshapeを組み合わせて、男性の行数だけ取得します

結合後の分割をshapeとilocを利用する
#男性と女性を結合する
df_2 = pd.concat([male,female])

#男性の行数をshapeを使い取得する
df_2.iloc[:male.shape[0],:]
df_2.iloc[:male.shape[0],:]
【Python】指定の範囲のデータを抽出する|loc iloc

機械学習の前処理で活用する

最後に機械学習の前処理において、shapeが活躍するのでご紹介します

訓練データ(train)とテストデータ(test)を同時にダミー変数処理を実施する流れを実施します

図のように「A~D」が入っている列をget_dummiesを使い列を増やします

機械学習の前処理でダミー変数処理をする流れ
traintestのデータを用意します
trainとtestのデータを用意します
traintestのデータをconcatで結合します
trainとtestのデータをconcatで結合します
結合したデータをget_dummiesでダミー変数化します
結合したデータをget_dummiesでダミー変数化します
ilocshapeを利用して元の形に分割します
ilocとshapeを利用して元の形に分割します
MEMO

もちろん訓練データ(train)とテストデータ(test)を別々にダミー変数処理することも可能です

ただし、それぞれにしかない項目がある場合、カラム数が異なってしまい、モデル学習の際にエラーが発生してしまいます

一度まとめて処理した後に、ilocshapeを使って分割する方法を実施してください

【Python】concat|複数のデータを連結する 【Python】カテゴリ変数の数値変換|ダミー処理(one-hot encoding / label encoding)

まとめ

今回はshapeを利用してDataFrameの行数・列数を確認する方法をご紹介してきました

簡単に行数・列数を把握することができるのでぜひ活用してみてください

また機械学習の前処理にも活用できるので、自然に使えるようにしてください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。