Python、機械学習

【Python】忘れがちな、リスト ↔︎ Numpy配列 ↔︎ Series ↔︎ DataFrameの変換方法

久々にPythonを使うと、以前は普通にできた操作がスムーズにできず、やり方を思い出すところから始めることが多くなります。

いちいちGoogleでキーワード検索して思い出すのもなかなかの気苦労です。

そこで、自分への備忘録も兼ねて、ブランク明けに忘れがちなPythonの操作をまとめました。

今回は、リスト、Numpy配列、Series、DataFrameの変換について説明します。

リスト、Numpy配列、Series、DataFrame間のデータ変換

とりあえず、こちらの図を見ればすぐに思い出せるかと思います。

【ラベル(index)を指定する場合】

【カラム(columns)も指定する場合】

言わずもがなですが、リストやNumpy配列のデータはラベルを好きにいじることができません(一番左なら0、その次は1、のように完全追番制)。

Seriesならラベルをいじれます。

DataFrameならラベルとカラムの両方をいじることができます。

実際にPythonコードを書いてみる(ドラクエのデータを例に)

以下、ドラクエのデータを例に説明します。

戦士、勇者、僧侶、魔法使いのHP(ヒットポイント)を並べたリスト”HP”を作成します。

import numpy as np
import pandas as pd

#戦士、勇者、僧侶、魔法使いのHP(ヒットポイント)
HP = [120, 110, 75, 50]

1)リスト⇔Numpy配列

リスト→Numpy配列

HP_arr = np.array(HP)
HP_arr

array([120, 110, 75, 50])

Numpy配列→リスト

HP_arr.tolist()

[120, 110, 75, 50]

2)リスト、Numpy配列⇔Series

リスト→Series

HP_s = pd.Series(HP)
HP_s

0 120
1 110
2 75
3 50
dtype: int64

次のようにすれば、indexを指定できます。

HP_s = pd.Series(HP, index = ['戦士', '勇者', '僧侶', '魔法使い'])
HP_s

戦士 120
勇者 110
僧侶 75
魔法使い 50
dtype: int64

Numpy配列→Series

リストをSeriesに変換する方法と同じです。

HP_s = pd.Series(HP_arr)
HP_s

0 120
1 110
2 75
3 50
dtype: int64

HP_s = pd.Series(HP_arr, index = ['戦士', '勇者', '僧侶', '魔法使い'])
HP_s

戦士 120
勇者 110
僧侶 75
魔法使い 50
dtype: int64

Series→Numpy配列

HP_s.values.tolist()

[120, 110, 75, 50]

Series→Numpy配列

HP_s.values

array([120, 110, 75, 50])

Series⇔DataFrame

Series→DataFrame

df = pd.DataFrame(HP_s)
df

以下のように書くと、カラムを指定できます。

df = pd.DataFrame(HP_s, columns = ['HP'])
df

DataFrame→Series

df['HP']

戦士 120
勇者 110
僧侶 75
魔法使い 50
Name: HP, dtype: int32

この書き方でもOKです。

df.HP

Series、DataFrameからラベル(index)の情報を取り出す方法

実際にコードを書いて確認します。

df.index

Index([‘戦士’, ‘勇者’, ‘僧侶’, ‘魔法使い’], dtype=’object’)

df.index.tolist()

[‘戦士’, ‘勇者’, ‘僧侶’, ‘魔法使い’]

DataFrameからカラム(columns)の情報を取り出す方法

実際にコードを書いて確認します。

df.columns

Index([‘HP’], dtype=’object’)

df.columns.tolist()

[‘HP’]

DataFrameにカラムを追加、削除する方法

MPというカラムを追加してみたいと思います。MPは魔法を使うためのマジックポイントですね。

df['MP']=[0, 30, 65, 80]
df

カラムを削除する場合は以下の通りです。

df.drop(columns=['MP'])

こちらでもOK。

df.drop('MP'、axis = 1)

リストやNumpy配列とDataFrameの変換

こちらの図の通りです。

もし横方向に並べたいのなら・・・

リストやNumpy配列を2次元にすることで、データを横方向に並べることができます。

つまり、角カッコ[ ]で括ります。

横方向に並べる方法については、こちらの記事に詳しくまとめましたのでご参照ください。

【Python】リストやNumpy配列のデータをDataFrameの行(row、横方向)に並べるにはリストやNumpy配列をpd.DataFrame()でDataFrameに変換すると、必ずカラムとして導入されます。 つまり、デー...