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次元にすることで、データを横方向に並べることができます。
つまり、角カッコ[ ]で括ります。
横方向に並べる方法については、こちらの記事に詳しくまとめましたのでご参照ください。