Pythonのリスト型にどうしても変換したい時や、反対に、Pythonのリスト型をPandas形式に変換したい時ありますよね。
お互いに簡単に変換することができるので、その方法をまとめてみました。
こんな方にオススメです!
- Python 標準のリスト型 list から Pandas の DataFrame(データフレーム)や Series(シリーズ)に変換したい
- Pandas の DataFrame や Series から Python 標準のリスト型 list に変換したい
もくじ
リスト型から Series に変換する方法
リスト型からSeriesやDataFrameへの変換はとても簡単です!
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を指定することでラベルを指定することもできます。
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と同様にします。
#リスト形式
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
こちらも同じように、行と列それぞれに対してラベルを付けることができます。
#リスト形式
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 を経由して、ndarray のtolist()メソッドでリストに変換していきます。
#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列をリセットしてデータとして扱います。
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の転置がわからない方は下記の記事をご覧ください!
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']]

Series からリスト型に変換する方法
最後はSeriesからリスト型への変換です。基本的にDataFrameからリスト型への変換と変わりません。
s = pd.Series(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
s.values.tolist()
まとめ
Python製のリスト型とPandasのDataFrame, Seriesとの相互の変換方法について見てきました。DataFrameからリスト型への変換は若干ややこしいですが、覚えればラクラクと扱えるので、ぜひ様々なデータで試してみてください!

