始めに
- pandasで使われるDataFrameとSeries,標準のlistを相互に変換したい
- pandasで加工したデータを他ライブラリで使う時、listしか対応していないことがあるので、困らないように
作業環境
- OS:macOS Catalina ver10.15.6
- コードエディター:jupyter lab
- 言語:python3
参考サイト
- pandas.DataFrame, SeriesとPython標準のリストを相互に変換
- Pandasユーザーガイド「データの索引と選択」(公式ドキュメント日本語訳)
- pandas documentation
実際にやってみる
- listからdataframe,seriesに変換する
- seriesからlistに変換する
- dataframeからlist,seriesに変換する
listからdataframe,seriesに変換する
list→series
#pandasをインポートしてpdに名前変更
import pandas as pd
#標準ライブラリのリストを作成からの表示
l_1d = [0, 1, 2]
l_1d
#[0, 1, 2]
#次はlistをseriesに型変換する
s = pd.Series(l_1d)
s
#0 0
#1 1
#2 2
#dtype: int64
#何も指定しないとindexは0から自動で決まる
#次はindexを指定しながらlistからseries型に変換する
s = pd.Series(l_1d, index=['row1', 'row2', 'row3'])
s
#row1 0
#row2 1
#row3 2
#dtype: int64
#一気にindexまで指定することもできる
#今回の記事とは関係ないけど、以外と使うかも
s = pd.Series({"row1":0,"row2":1,"row3":2})
s
#row1 0
#row2 1
#row3 2
#dtype: int64
list→dataframe
#データーフレームに変換するので2次元配列を用意する
l_2d = [[0, 1, 2], [3, 4, 5]]
df = pd.DataFrame(l_2d)
df
# 1 2
#0 0 1 2
#1 3 4 5
#index,columnの両方を指定してdataframeを作成することも可能
df = pd.DataFrame(l_2d,
index=['row1', 'row2'],
columns=['col1', 'col2', 'col3'])
df
# col1 col2 col3
#row1 0 1 2
#row2 3 4 5
#一気にindex,columnまで指定することもできる
#今回の記事とは関係ないけど、以外と使うかも
df = pd.DataFrame([[1,2,3],[4,5,6]],["row1","row2"],["col1","col2","col3"])
df
# col1 col2 col3
#row1 1 2 3
#row2 4 5 6
seriesからlistに変換する
series→list
#まずはseriesを作成する
s = pd.Series([0, 1, 2])
print(s)
# 0 0
# 1 1
# 2 2
# dtype: int64
#seriesの値だけlist型で取得する
l_1d = s.values.tolist()
print(l_1d)
#[0, 1, 2]
dataframeからlist,seriesに変換する
dataframe→list
#dataframeを作成
df = pd.DataFrame([[0, 1, 2], [3, 4, 5]])
print(df)
# 0 1 2
#0 0 1 2
#1 3 4 5
#dataframeの値だけをlist型で取得する
#indexやcolumnsは無視される
l_2d = df.values.tolist()
print(l_2d)
#[[0, 1, 2], [3, 4, 5]]
#dataframeをlist型で取得すると2次元配列になる
#2次元を1次元配列に変換する方法
#関係ないけどあったらいつか使うかも?
#numpyを使うのでインポートします
import numpy as np
#標準ライブラリのlist型からarray型に変換
#どちらも配列です
arr_list = np.array(l_2d)
arr_list.flatten().tolist()
#[0, 1, 2, 3, 4, 5]
dataframe→series
#dataframeを作成する
df = pd.DataFrame([[0, 1, 2], [3, 4, 5]],["row1","row2"],["col1","col2","col3"])
print(df)
# col1 col2 col3
#row1 0 1 2
#row2 3 4 5
#columnをseriesとして取得する
df_toSer = df["col1"]
df_toSer
#row1 0
#row2 3
#Name: col1, dtype: int64
#indexをseriesとして取得する
df_toSer2 = df.iloc[0]
df_toSer2
#col1 0
#col2 1
#col3 2
#Name: row1, dtype: int64
終わりに
今回参考にしたサイトになります。