PythonのPandasにおける shape
属性(「メソッド」ではなく正確には「属性」)について、詳しく解説します。
目次
基本的な概要
shape
は、DataFrame
やSeries
の 行数と列数をタプル(tuple)で返す属性 です。- 形式:
DataFrame.shape # (行数, 列数) Series.shape # (要素数, )
例えば:
import pandas as pd
# サンプルのDataFrameを作成
df = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["Tokyo", "Osaka", "Nagoya"]
})
print(df.shape) # (3, 3)
ここでは 3行3列 なので (3, 3)
が返ります。
DataFrameとSeriesの違い
- DataFrameの場合
shape
は(行数, 列数)
の2要素タプルを返す。df.shape # 例: (3, 3)
- Seriesの場合
shape
は(要素数,)
の1要素タプルを返す。s = pd.Series([10, 20, 30, 40]) print(s.shape) # (4,)
利用シーン
データのサイズ確認
データ分析の最初に「どのくらいの規模か」をざっくり把握できる。
import pandas as pd
df = pd.DataFrame({
"A": range(5),
"B": range(5, 10)
})
rows, cols = df.shape
print(f"行数: {rows}, 列数: {cols}") # 行数: 5, 列数: 2
データ処理の途中でのチェック
クリーニングや加工の過程で、行数・列数が想定通り変化しているかを検証できる。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"A": [1, 2, np.nan, 4, 5],
"B": [10, 20, 30, np.nan, 50]
})
print("前処理前:", df.shape) # (5, 2)
# 欠損値を含む行を削除
df = df.dropna()
print("前処理後:", df.shape) # (3, 2)
データフレームの条件分岐
例えば、大きすぎるデータは処理を分割する、といった条件分岐に活用。
import pandas as pd
# 大きめのDataFrameを仮に作成
df = pd.DataFrame({"col": range(2000000)})
if df.shape[0] > 1000000:
print("データが大きいので分割処理を行います。")
else:
print("処理を一括で行います。")
他の類似メソッドとの違い
len(df)
→ 行数のみを返す。len(df) # 行数だけ
df.info()
→ 行数・列数だけでなく、各列のデータ型や欠損値数も表示。df.info()
df.size
→ 総要素数(行数 × 列数)を返す。df.size
df.ndim
→ 次元数を返す。DataFrameなら「2」、Seriesなら「1」。
注意点
- shapeは「メソッド」ではなく「属性」
→df.shape()
ではなくdf.shape
と書く必要がある。 - 戻り値はタプル
→df.shape[0]
で行数、df.shape[1]
で列数を取得できる。 - 大規模データでも高速
→df.shape
はメタデータから取得するので、実際にデータを走査しない。数百万行あっても即時に返る。
まとめ
shape
はDataFrameやSeriesのサイズ(行数・列数)をタプルで返す属性DataFrame → (行数, 列数)
、Series → (要素数,)
- データ規模の把握、前処理後のチェック、条件分岐などでよく使う
len(df)
、df.size
、df.info()
などの関連機能と使い分けるのがポイント
以上、PythonのPandasのshapeメソッドについてでした。
最後までお読みいただき、ありがとうございました。