PythonのPandasのデータフレームの分割について

Python,イメージ

AI実装検定のご案内

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のデータフレームの分割についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次