このブログではデータハンドリングの基本である、DataFrame, ndarray, list の形式変換について「DataFrame, ndarray, list の使い分けについて実用的に考える」という問いに対してブログにしました。

この記事の目的

データ分析をするデータセットはそのほとんどは、n行 x m列の2次元のデータです。2次元のデータを扱うためのデータ形式には、Pandas のデータフレーム、Numpyのndarray、Python標準の list が一般的です。それぞれの形式をその用途に合わせて相互変換します。

このブログでは、2次元のデータに絞って、データ分析の観点から使い方に合わせて変換できることを目標にしています。

DataFrame <-> ndarray <-> list 間の相互変換

Python では次の3つの形式をよく使います:

  • list(リスト)
  • ndarray(NumPy 配列)
  • DataFrame(Pandas の表形式データ)

これらは用途が違うため、必要に応じて相互に変換して使います。

1. list → ndarray(NumPy 配列)

Python の list を NumPy の ndarray に変換します。

1
2
3
4
import numpy as np

my_list = [1, 2, 3]
my_array = np.array(my_list)

2. ndarray → list

NumPy 配列を Python の list に戻します。

1
my_list = my_array.tolist()

3. ndarray → DataFrame(Pandas)

NumPy 配列を Pandas の DataFrame に変換します。

1
2
3
import pandas as pd

my_df = pd.DataFrame(my_array)

4. DataFrame → ndarray

DataFrame から ndarray に変換します。

1
my_array = my_df.values

.values は ndarray を返します
(Pandas 1.0以降は .to_numpy() を使うことも推奨されています)

1
my_array = my_df.to_numpy()

DataFrame <-> ndarray <-> list 相互変換イメージ

df_ndarray_list_conversion

変換一覧 

変換 コード
list → ndarray np.array(my_list)
ndarray → list my_array.tolist()
ndarray → DataFrame pd.DataFrame(my_array)
DataFrame → ndarray my_df.values または my_df.to_numpy()

Pandas が用意する二次元データセット|DataFrame:データフレーム

Pandasは、Pythonでのデータ分析ライブラリとして最も活⽤されているライブラリです。

PandasはNumpyを、Numpyを基盤に、シリーズ(Series、1次元データ)とデータフレーム(DataFrame、二次元データ)という二つのデータ型を提供します。

特に、データフレームは使いやすく、豊富な機能(メソッド)が用意され、データ分析のための必須のデータセットを扱う二次元データです。

DataFrameの使い道
  1. DataFrameはインデックス(index)やカラム(column)名を指定して、Excelのシートのようにデータセットを用意するために利用します

数値計算に特化したNumPy ndarray

NumPy(ナンパイ)は、数値計算を効率よく行うためのPythonのライブラリです。 Pythonには標準で「リスト型」がありますが(後述します)、大量の数値データを扱うときは処理が遅くなったり、複雑になったりします。そこで役に立つのが NumPy です。

NumPy を使うとできること

(1) 多次元配列(行列など)を高速に扱える
(2) 標準偏差・分散などの統計量を簡単に計算できる
(3) 科学技術計算や、機械学習・ディープラーニングでもよく使われる

NumPy の ndarray(エヌディーアレイ)とは?

NumPyには ndarray(エヌディーアレイ) という、数値データのための特別な配列型があります。

(1) 見た目はPythonのリストに似ている
(2) しかし、ベクトル計算のように、要素をまとめて高速に計算できる

(例:配列に +1 すると、全ての要素に一気に1が足される)

ndarray と list の計算の違い

ndarray_vs_list

ndarrayの使い道
  1. 機械学習での学習用と検証用に分割したデータセットなど分析モデルの入出力形式です

Pandas, Numpyとも「統計量」を算出するメソッドは多数提供されています。Pandas の方が使いやすく、見やすいという意見も多いです。

Python にもともと用意されている配列:list(リスト)

Python には list(リスト) という、複数の値をひとまとめにして扱える便利なデータ形式があります。

(1) 1つの変数の中に、いくつものデータを入れられる
例:[1, 2, 3][“apple”, “banana”]
(2) Python では、入力や出力でよく使われる基本的なデータ形式

そのため「とりあえず配列を使いたい」というときは、まず list を使うことが多いです。

listの使い道
  1. インデックス番号(添字と呼んだりします)で要素を指定することができる、Pyhtonプログラムの入出力データの標準的な配列形式です

まとめ

  DataFrame ndarray list
利用するライブラリ Pandas Numpy Python標準
ラベルインデックス
(列、行に任意の名前を付けること)
可(列名、行名を指定してにデータの操作が可能) 不可(0から始まるインデックス番号で操作する) 不可(0から始まるインデックス番号で操作する)
特徴 使いやすい、メソッドが豊富 計算に特化した配列形式 tuple, dictionaryと並ぶ配列形式の一つ
目的 欠損値処理、標準化等の分析データの整形 機械学習、ディープラーニングの目的、説明変数等 Pythonプログラムのデータの入出力等