Pythonを使ってデータ分析や機械学習を行う際、必ずといっていいほど登場するのが以下の3つのデータ構造です:
- PandasのDataFrame(データフレーム):表形式のデータ操作に便利
- NumPyのndarray(配列):数値計算の基盤
- PyTorchのTensor(テンソル):深層学習フレームワークで使用
この記事では、これら3つの構造を相互に変換する方法をまとめます。
経済統計の使い方では、統計データの入手法から分析法まで解説しています。

1. データ構造の関係図
深層学習で、データを変更していく場合は以下の手順となります。データフレームを配列に変換して、さらにテンソルに変換します。
データフレーム
↓ .values / .to_numpy()
配列
↓ torch.from_numpy()
テンソル
2. DataFrame → NumPy配列
方法①:.values
データフレームを配列に変換するには、valuesメソッドを使います。配列には変数名は保存されないので、変数名はなくなります。
import pandas as pd
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
array = df.values
print(df)
print(array)
出力
A B
0 1 4
1 2 5
2 3 6
[[1 4]
[2 5]
[3 6]]
方法②:.to_numpy()
.to_numpy()でも配列に変換できます。
array = df.to_numpy()
import pandas as pd
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
array = df.to_numpy()
print(df)
print(array)
出力
A B
0 1 4
1 2 5
2 3 6
[[1 4]
[2 5]
[3 6]]
3. NumPy配列 → DataFrame
配列からデータフレームへの変換です。DataFrame関数を使います。配列には変数名(カラム名)がないので、カラム名を指定します。
import numpy as np
array = np.array([[1, 2], [3, 4]])
df = pd.DataFrame(array, columns=["A", "B"])
print(array)
print(df)
出力
[[1 2]
[3 4]]
A B
0 1 2
1 3 4
4. NumPy配列 → Tensor
配列からテンソルへの変換です。dtypeはfloat32かfloat64である必要があるので、それも明記しておきます。方法①では配列とテンソルでメモリーを共有するため、テンソルを変更すると配列も変更されます。
方法①:torch.from_numpyを使う
import numpy as np
import torch
array = np.array([[1.0, 2.0], [3.0, 4.0]])
tensor = torch.from_numpy(array) .float()
print(array)
print(tensor)
出力
[[1. 2.]
[3. 4.]]
tensor([[1., 2.],
[3., 4.]])
方法②:torch.tensorを使う
import numpy as np
import torch
array = np.array([[1.0, 2.0], [3.0, 4.0]])
tensor = torch.tensor(array,dtype=torch.float32)
print(array)
print(tensor)
出力
[[1. 2.]
[3. 4.]]
tensor([[1., 2.],
[3., 4.]])
5. Tensor → NumPy配列
テンソルから配列への変換は、tensor.numpy関数を使います。
import numpy as np
import torch
tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
array = tensor.numpy()
print(tensor)
print(array)
出力
tensor([[1., 2.],
[3., 4.]])
[[1. 2.]
[3. 4.]]
6. DataFrame → Tensor(直接)
データフレームからテンソルには直接変換できないので、NumPyを経由します。データフレームから配列に変換し、それをテンソルに変換します。テンソルへの変換法は、上記4と同じです。
方法①:torch.from_numpyを使う
import pandas as pd
import torch
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
tensor = torch.from_numpy(df.to_numpy()).float()
print(df)
print(tensor)
出力
A B
0 1 4
1 2 5
2 3 6
tensor([[1., 4.],
[2., 5.],
[3., 6.]])
方法②:torch.tensorを使う
import pandas as pd
import torch
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
tensor = torch.tensor(df.to_numpy(), dtype=torch.float32)
print(df)
print(tensor)
出力
A B
0 1 4
1 2 5
2 3 6
tensor([[1., 4.],
[2., 5.],
[3., 6.]])
7. Tensor → DataFrame(列名つき)
テンソルをデータフレームに直接変換できないので、まず配列に変換して、データフレームにします。テンソルには(コラム名)がないので、コラム名を付けます。
import numpy as np
import torch
tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
df = pd.DataFrame(tensor.numpy(), columns=["A", "B"])
print(tensor)
print(df)
出力
tensor([[1., 2.],
[3., 4.]])
A B
0 1.0 2.0
1 3.0 4.0
まとめ:変換コード早見表
配列からテンソルには2つの方法がありますが、早見表では、torch.from_numpyを使っています。
変換元 → 変換先 | コード例 |
---|---|
DataFrame → ndarray | df.to_numpy() |
ndarray → DataFrame | pd.DataFrame(array) |
ndarray → Tensor | torch.from_numpy(array) |
Tensor → ndarray | tensor.numpy() |
DataFrame → Tensor | torch.tensor(df.to_numpy()) |
Tensor → DataFrame | pd.DataFrame(tensor.numpy()) |
おわりに
この3つの構造(DataFrame・ndarray・Tensor)を自在に変換できるようになると、データの前処理からモデル学習、可視化までスムーズに進めることができます。
とくに、時系列データをLSTMなどに入力するケースでは、「行方向が時間、列方向が特徴量」という理解と変換の順序が非常に重要です。
- 【Python】テンソルの操作(Pytorch)
- 【python】深層学習の計算手順(学習と検証)(Pytorch)
- 【python】 最小二乗法の計算|statsmodelsとscikit-learn
- 【python】とにかくどんなデータか知りたい
- 【python】行や列を加える(データフレーム)