【便利】Python 標準のリストと Pandas のDataFrame, Seriesを相互に変換する方法をまとめてみた

Pythonのリスト型にどうしても変換したい時や、反対に、Pythonのリスト型をPandas形式に変換したい時ありますよね。
お互いに簡単に変換することができるので、その方法をまとめてみました。

こんな方にオススメです!

  • Python 標準のリスト型 list から Pandas の DataFrame(データフレーム)や Series(シリーズ)に変換したい
  • Pandas の DataFrame や Series から Python 標準のリスト型 list に変換したい

リスト型から Series に変換する方法

リスト型からSeriesやDataFrameへの変換はとても簡単です!

Python
import pandas as pd

#リスト形式
calendar = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

#Seriesに変換
pd.Series(calendar)
0    Mon
1    Tue
2    Wed
3    Thu
4    Fri
5    Sat
6    Sun

また、引数にindexを指定することでラベルを指定することもできます。

Python
import pandas as pd

#リスト形式
calendar = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

#Seriesに変換
pd.Series(calendar, index=['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 'row7'])
row1    Mon
row2    Tue
row3    Wed
row4    Thu
row5    Fri
row6    Sat
row7    Sun

リスト型から DataFrame に変換する方法

DataFrameへの変換もSeriesと同様にします。

Python
#リスト形式
calendar = [['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ['a', 'b', 'c', 'd', 'e', 'f', 'g']]

pd.DataFrame(calendar)
	0	1	2	3	4	5	6
0	Mon	Tue	Wed	Thu	Fri	Sat	Sun
1	a	b	c	d	e	f	g

こちらも同じように、行と列それぞれに対してラベルを付けることができます。

Python
#リスト形式
calendar = [['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ['a', 'b', 'c', 'd', 'e', 'f', 'g']]

pd.DataFrame(calendar, 
             index=['row1', 'row2'],
             columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'])
	col1	col2	col3	col4	col5	col6	col7
row1	Mon	Tue	Wed	Thu	Fri	Sat	Sun
row2	a	b	c	d	e	f	g

DataFrame からリスト型に変換する方法

値のみをリスト型に変換

Pandasには、DataFrame をリスト型に直接変換するメソッドがありません。よって、valuesで取得できるNumpy配列の ndarray を経由して、ndarraytolist()メソッドでリストに変換していきます。

Python
#PandasでDataFrameを作成
df = pd.DataFrame([['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ['a', 'b', 'c', 'd', 'e', 'f', 'g']])

#valuesのtolistでリスト形式に戻す
df.values.tolist()

行ラベルも含めてリスト型に変換

値だけではなく、行名も含めてリスト形式に戻すこともできます。reset_index()メソッドを使って、index列をリセットしてデータとして扱います。

Python
df = pd.DataFrame([['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ['a', 'b', 'c', 'd', 'e', 'f', 'g']], 
                  index=['row1', 'row2'],
                  columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'])

#行名も含める
df.reset_index().values.tolist()
[['row1', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
 ['row2', 'a', 'b', 'c', 'd', 'e', 'f', 'g']]

列名も含める

列名(列ラベル)をリセットするメソッドはありません。DataFrameで行名も列名もリストのデータとして残したい場合には、reset_index()メソッドを適用した後に、行と列を入れ替えて(転置)、再度reset_index()メソッドを適用し、元に戻します。2回ほど転置させるので、Pandasの転置がわからない方は下記の記事をご覧ください!

Python
df = pd.DataFrame([['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ['a', 'b', 'c', 'd', 'e', 'f', 'g']], 
                  index=['row1', 'row2'],
                  columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'])

#行名も含める
df.reset_index().T.reset_index().T.values.tolist()
[['index', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'],
 ['row1', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
 ['row2', 'a', 'b', 'c', 'd', 'e', 'f', 'g']]
PandasのDataFrameの行と列を入れ替える方法を解説!

Series からリスト型に変換する方法

最後はSeriesからリスト型への変換です。基本的にDataFrameからリスト型への変換と変わりません。

Python
s = pd.Series(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
s.values.tolist()

まとめ

Python製のリスト型とPandasのDataFrame, Seriesとの相互の変換方法について見てきました。DataFrameからリスト型への変換は若干ややこしいですが、覚えればラクラクと扱えるので、ぜひ様々なデータで試してみてください!

DataFrame(データフレーム)入門:基本的な使い方を総まとめ! scikit-learnに付いてくるデータセット7種類を全部まとめてみた