Pandasのデータフレーム分割は、データを「行」「列」「条件」「チャンク」などに応じて分ける操作のことを指します。
分析や機械学習の前処理でよく使われる重要なテクニックです。
ここでは代表的な方法を体系的に解説します。
目次
行ごとに分割する方法
行ベースの分割はもっとも基本的な操作です。
典型的な用途は「データの前半・後半に分ける」「特定の条件を満たすデータを抽出する」などです。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"A": range(10),
"B": list("abcdefghij")
})
# インデックス指定で分割
df1 = df.iloc[:5]
df2 = df.iloc[5:]
print("インデックス指定で分割:")
print(df1)
print(df2)
# 条件で分割
df_low = df[df["A"] < 5]
df_high = df[df["A"] >= 5]
print("\n条件で分割:")
print(df_low)
print(df_high)
# numpy.array_split を使った等分割
dfs = np.array_split(df, 3)
print("\nnp.array_splitで分割:")
for i, d in enumerate(dfs):
print(f"--- 分割 {i+1} ---")
print(d)
列ごとに分割する方法
次に列単位で分けるケースです。
実務では「数値型の列だけ取り出して前処理」「カテゴリ列だけ扱いたい」といった場面がよくあります。
# 特定の列を選択
df_A = df[["A"]]
df_B = df[["B"]]
print("列ごとに分割:")
print("A列:")
print(df_A)
print("B列:")
print(df_B)
# 複数の列をまとめて分割
df_num = df[["A"]]
df_cat = df[["B"]]
print("\n数値列とカテゴリ列に分割:")
print("数値列:")
print(df_num)
print("カテゴリ列:")
print(df_cat)
グループ化して分割する方法
groupby
を使えば、カテゴリ変数でデータを分けられます。
カテゴリごとに集計や処理を行う際に非常に便利です。
df_group = pd.DataFrame({
"Category": ["X", "Y", "X", "Z", "Y", "Z"],
"Value": [10, 20, 30, 40, 50, 60]
})
groups = dict(tuple(df_group.groupby("Category")))
print("グループ化して分割:")
for key, value in groups.items():
print(f"--- グループ {key} ---")
print(value)
# "X"グループを取得
df_X = groups["X"]
print("\nXグループ:")
print(df_X)
学習用と検証用に分割する方法
機械学習では「訓練データ」と「テストデータ」に分けるのが定番です。
sklearn.model_selection.train_test_split
を使います。
from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2, random_state=42)
print("学習用と検証用に分割:")
print("訓練データ:")
print(train)
print("テストデータ:")
print(test)
大規模データをチャンクごとに読み込む・処理する
巨大なCSVなどを扱うときは、一度に読み込まず「分割」して処理することが重要です。
# デモ用に CSV を保存
df.to_csv("data.csv", index=False)
chunksize = 3
print("チャンクごとに読み込み:")
for chunk in pd.read_csv("data.csv", chunksize=chunksize):
print("--- チャンク ---")
print(chunk)
この方法はメモリ節約に有効です。
まとめ
- 行分割 →
iloc
, 条件抽出,np.array_split
- 列分割 → 列の選択で新しいデータフレームを作成
- グループ分割 →
groupby
を使って辞書化 - 学習/検証分割 →
train_test_split
が便利 - 大規模処理 →
chunksize
で分割して読み込み
以上、PythonのPandasのデータフレームの分割についてでした。
最後までお読みいただき、ありがとうございました。