経済統計の使い方
統計初心者向けに、データや分析手法の解説をしています。「まとめページ」をご覧くだされば、全体的な内容がわかると思います。
python

【python】Pandasデータフレーム、NumPy配列、PyTorchテンソルの変換早見表

変換方法のまとめ

Pythonを使ってデータ分析や機械学習を行う際、必ずといっていいほど登場するのが以下の3つのデータ構造です:

  • PandasのDataFrame(データフレーム):表形式のデータ操作に便利
  • NumPyのndarray(配列):数値計算の基盤
  • PyTorchのTensor(テンソル):深層学習フレームワークで使用

この記事では、これら3つの構造を相互に変換する方法をまとめます。

経済統計の使い方では、統計データの入手法から分析法まで解説しています。

【python】pythonのまとめ 経済統計の使い方では、統計データの入手法から分析法まで解説しています。 https://officekaisuiyoku.com...

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 → ndarraydf.to_numpy()
ndarray → DataFramepd.DataFrame(array)
ndarray → Tensortorch.from_numpy(array)
Tensor → ndarraytensor.numpy()
DataFrame → Tensortorch.tensor(df.to_numpy())
Tensor → DataFramepd.DataFrame(tensor.numpy())

おわりに

この3つの構造(DataFrame・ndarray・Tensor)を自在に変換できるようになると、データの前処理からモデル学習、可視化までスムーズに進めることができます。

とくに、時系列データをLSTMなどに入力するケースでは、「行方向が時間、列方向が特徴量」という理解と変換の順序が非常に重要です。


COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA