Pythonを使っていて忘れがちな、リスト、Numpy配列、Series、DataFrameの間の変換方法についてまとめます。
リスト、Numpy配列、Series、DataFrame間のデータ変換
とりあえず、こちらの図を見ればすぐに思い出せると思います。
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド1.png?resize=1024%2C576&ssl=1)
【ラベル(index)を指定する場合】
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド2.png?resize=1024%2C576&ssl=1)
【カラム(columns)も指定する場合】
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド3.png?resize=1024%2C576&ssl=1)
言わずもがなですが、リストや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
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/df_no_columns.png?resize=132%2C155&ssl=1)
以下のように書くと、カラムを指定できます。
df = pd.DataFrame(HP_s, columns = ['HP'])
df
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/df_HPcolumn.png?resize=132%2C155&ssl=1)
DataFrame→Series
df['HP']
戦士 120
勇者 110
僧侶 75
魔法使い 50
Name: HP, dtype: int32
この書き方でもOKです。
df.HP
Series、DataFrameからラベル(index)の情報を取り出す方法
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド4.png?resize=1024%2C576&ssl=1)
実際にコードを書いて確認します。
df.index
Index([‘戦士’, ‘勇者’, ‘僧侶’, ‘魔法使い’], dtype=’object’)
df.index.tolist()
[‘戦士’, ‘勇者’, ‘僧侶’, ‘魔法使い’]
DataFrameからカラム(columns)の情報を取り出す方法
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド6.png?resize=1024%2C576&ssl=1)
実際にコードを書いて確認します。
df.columns
Index([‘HP’], dtype=’object’)
df.columns.tolist()
[‘HP’]
DataFrameにカラムを追加、削除する方法
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド7.png?resize=1024%2C576&ssl=1)
MPというカラムを追加してみたいと思います。MPは魔法を使うためのマジックポイントです。
df['MP']=[0, 30, 65, 80]
df
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/df_HP_MPcolumns.png?resize=130%2C152&ssl=1)
カラムを削除する場合は以下の通りです。
df.drop(columns=['MP'])
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/df_HPcolumn.png?resize=132%2C155&ssl=1)
こちらでもOK。
df.drop('MP'、axis = 1)
リストやNumpy配列とDataFrameの変換
こちらの図の通りです。
もし横方向に並べたいのなら・・・
リストやNumpy配列を2次元にすることで、データを横方向に並べることができます。
つまり、角カッコ[ ]で括ります。
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/07/スライド12.png?resize=1024%2C576&ssl=1)
横方向に並べる方法については、こちらの記事に詳しくまとめましたのでご参照ください。
![](https://i0.wp.com/punhundon-lifeshift.com/wp-content/uploads/2019/06/Numpy配列をDataFrameの行に.png?resize=320%2C180&ssl=1)