Pythonのデータ処理では NumPy と Pandas が非常に重要であり、両者を相互に変換するシーンはよくあります。
ここでは、実務で役立つように以下の流れで詳しく解説します。
目次
NumPyとPandasの基本的な違い
NumPy
- 対象: 数値計算・配列操作
- 構造:
ndarray
(多次元配列) - 用途: 行列演算、統計処理、数値計算全般
- 特徴: 軽量で高速。データ型は基本的に均一。
Pandas
- 対象: 表形式データ(ExcelやCSVのような形式)
- 構造:
Series
(1次元:ラベル付き配列)DataFrame
(2次元:ラベル付き表形式データ)
- 用途: データ分析、加工、集計、時系列処理
- 特徴: 列ごとに異なる型を扱える。ラベル操作が強力。
NumPyは数値処理の土台、Pandasはラベル付きのデータ操作に強いという位置付けです。
NumPy → Pandasへの変換
1次元配列 → Series
import numpy as np
import pandas as pd
# NumPy配列
arr = np.array([10, 20, 30, 40])
# PandasのSeriesへ変換
s = pd.Series(arr)
print(s)
インデックスが自動的に付与されます。
2次元配列 → DataFrame
# NumPy 2次元配列
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
# DataFrameに変換
df = pd.DataFrame(arr2d, columns=["A", "B", "C"])
print(df)
列名やインデックスを自由に指定可能。
Pandas → NumPyへの変換
Series → NumPy配列
s = pd.Series([100, 200, 300])
arr = s.to_numpy()
print(arr) # [100 200 300]
DataFrame → NumPy配列
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
arr = df.to_numpy()
print(arr)
to_numpy()
が標準的ですが、古いコードでは .values
も使われます(推奨は to_numpy()
)。
よくある実務シーン
- 機械学習の前処理
- Pandasでデータを整形
- NumPy配列に変換してScikit-learnに渡す
X = df[["A", "B"]].to_numpy() y = df["target"].to_numpy()
- 数値演算だけしたい場合
- DataFrame → NumPyに変換して高速計算
- 計算後に再びDataFrameに戻すことも多い
- 統計・集計と機械学習の橋渡し
- Pandasはラベル付きの分析に強い
- NumPyは効率的な行列処理に強い
変換時の注意点
- データ型(dtype)の違い
Pandasは列ごとに型を持つが、NumPy配列は全体で1種類の型に統一される。
そのため、異なる型が混在しているとobject
型にまとめられることがあります。 - 欠損値の扱い
- NumPy:
np.nan
(float型でしか扱えない) - Pandas:
NaN
を各列の型に合わせて扱える
- NumPy:
- メモリ効率
大規模データの場合、NumPy配列の方が効率的。
ただし、可読性やラベル操作の柔軟さはPandasの方が高い。
まとめ
- NumPy: 数値処理・高速演算に強い
- Pandas: 表形式データの加工・ラベル操作に強い
- 実務では「Pandasで前処理 → NumPyに変換して機械学習」という流れが一般的。
以上、PythonのNumpyとPandasの変換についてでした。
最後までお読みいただき、ありがとうございました。