NumPy 配列を Pandas DataFrame に変換する

Suraj Joshi 2022年1月22日
NumPy 配列を Pandas DataFrame に変換する

このチュートリアルでは、pandas.DataFrame() メソッドを使って numpy 配列を Pandas DataFrame に変換する方法を説明します。

pandas.DataFrame() メソッドに numpy 配列を渡して、NumPy 配列から Pandas DataFrame を生成します。また、DataFrame のカラム名と行のインデックスを指定することもできます。

pandas.DataFrame() メソッドを使って NumPy 配列を Pandas DataFrame に変換する

NumPy 配列を pandas.DataFrame() メソッドに渡して、NumPy 配列から DataFrame を生成します。

from numpy import random
import pandas as pd

random.seed(5)
random.randint(100, size=(3, 5))
data_array = random.randint(100, size=(4, 3))

print("NumPy Data Array is:")
print(data_array)

print("")

data_df = pd.DataFrame(data_array)
print("The DataFrame generated from the NumPy array is:")
print(data_df)

出力:

NumPy Data Array is:
[[27 44 77]
 [75 65 47]
 [30 84 86]
 [18  9 41]]

The DataFrame generated from the NumPy array is:
    0   1   2
0  27  44  77
1  75  65  47
2  30  84  86
3  18   9  41

まず、サイズ (4,3)、4 行 3 列のランダムな配列を作成します。この配列を pandas.DataFrame() メソッドに引数として渡します。デフォルトでは、pandas.DataFrame() メソッドはデフォルトのカラム名と行インデックスを挿入します。

pandas.DataFrame() メソッドの indexcolumns パラメータを用いて列名と行のインデックスを設定することもできます。

from numpy import random
import pandas as pd

random.seed(5)
random.randint(100, size=(3, 5))
data_array = random.randint(100, size=(4, 3))
row_indices = ["Row_1", "Row_2", "Row_3", "Row_4"]
column_names = ["Column_1", "Column_2", "Column_3"]

print("NumPy Data Array is:")
print(data_array)

print("")

data_df = pd.DataFrame(data_array, index=row_indices, columns=column_names)
print("The DataFrame generated from the NumPy array is:")
print(data_df)

出力:

NumPy Data Array is:
[[27 44 77]
 [75 65 47]
 [30 84 86]
 [18  9 41]]

The DataFrame generated from the NumPy array is:
       Column_1  Column_2  Column_3
Row_1        27        44        77
Row_2        75        65        47
Row_3        30        84        86
Row_4        18         9        41

ここでは、index の値を row_indices に設定します。同様に、columns の値を各列の名前を含むリスト column_names に設定することで、列名を代入します。

場合によっては、NumPy の配列自体が行のインデックスと列名を保持していることもあります。そこで、配列のスライスを利用して、配列からデータ、行インデックス、列名を抽出します。

import numpy as np
import pandas as pd

marks_array = np.array(
    [["", "Mathematics", "Economics"], ["Sunny", 25, 23], ["Alice", 23, 24]]
)

print("NumPy Data Array is:")
print(marks_array)

print("")

row_indices = marks_array[1:, 0]
column_names = marks_array[0, 1:]
data_df = pd.DataFrame(
    data=np.int_(marks_array[1:, 1:]), index=row_indices, columns=column_names
)

print("The DataFrame generated from the NumPy array is:")
print(data_df)

出力:

NumPy Data Array is:
[['' 'Mathematics' 'Economics']
 ['Sunny' '25' '23']
 ['Alice' '23' '24']]

The DataFrame generated from the NumPy array is:
       Mathematics  Economics
Sunny           25         23
Alice           23         24

NumPy 配列自体に行インデックスとカラム名があります。1 行目と 1 列目以降の値をすべて選択して data 引数として pandas.DataFrame() 関数に渡し、2 行目から 1 列目の値をすべて選択して index 引数として渡します。同様に、2 番目の列から最初の行の値をすべて選択して columns 引数として渡し、列名を設定します。

numpy.array() は整数値を文字列に変換しながら NumPy 配列を作成し、配列と同じデータ形式であることを保証します。データの値を integer 型に変換するには numpy.int_() 関数を利用します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame