最終更新日:2021/9/1
List(li)、Series(se)から DataFrame(df)へ変換する方法を説明します。
正確には、List、SeriesからDataFrameの作成、あるいは、Seriesの連結です。
これは、既に用意したListをもとに、これをDataFrameにしたい場合や、既に用意したSeriesからDataFrameを作りたい場合に使います。
DataFrame(df)がデータを扱う基本形式なので、この操作はよく使います。
【説明すること】
- 1. ListからDataFrame (li=>df)
- 1.1. Listを行として、行方向に連結 :
pd.DataFrame([li1, li2])
- 1.2. Listを列として、列方向に連結 :
pd.DataFrame(zip(li1, li2))
- 1.1. Listを行として、行方向に連結 :
- 2. SeriesからDataFrame(se=>df)
- 2.1 行にする場合 :
pd.DataFrame(se)
- 2.2 列にする場合 :
pd.DataFrame([se])
- 2.3 複数のSeriesの場合
- (a) 列方向への連結 :
pd.concat([se1, se2], axis=1)
- (b) 行方向への連結 :
pd.DataFrame([se1, se2])
- (a) 列方向への連結 :
- 2.1 行にする場合 :
【各変換方法のページ一覧】
To(変換後) | |||||
List | Series | DataFrame | array | ||
From (変換前) | List | na | 省略 | 5.3の1. | 省略 |
Series | 5.2の1. | na | 5.3の2. | 省略 | |
DataFrame | 5.2の2. | 省略 | na | 5.4の2. | |
array | 5.2の3. | 省略 | 5.4の1. | na |
1. ListからDataFrame (li=>df)
複数のList(li)から、DataFrame(df)を作成する場合です。この場合、
pd.DataFrame()
を使いますが、DataFrame()の引数に[li1,li2]と指定するか(行方向)、zipを使ってzip(li1, li2)と指定するか(列方向)で結果が異なります。
これは、Listを横に広げて連結するか、縦に広げて連結するか、という違いになります。
以下で詳しく説明します。
カラム名やindex名を指定する場合は、pd.DataFrame()
の中にcolumns = []
, index =[]
でオプションを指定します。
1.1. Listを行として、行方向に連結
Listを行として扱い、これを行方向に連結する場合です。横に広げて、それを下に連結するイメージです。
pd.DataFrame([li1, li2])
と書きます。
【ポイント】
- 1. [li1, li2]のように、[]の中にListを列挙します。つまり、Listでli1, li2を指定します。
- 2. オプションの、
columns=[]
,index=[]
は、列やindexの数が一致しないとエラーとなります。
例)列が3つなのに、columns =[‘clm0’, ‘clm1’]と2つしか指定していない。
1.2. Listを列として、列方向に連結
Listを列として扱い、これを列方向に連結する場合です。縦に広げて、右に連結するイメージです。
zipを使って、
pd.DataFrame(zip(li1, li2), columns=['clm0', 'clm1'])
と書きます。
行方向と同様に、columns=
、index=
で指定するListの数に注意してください。実際の数と指定した数が一致しないとエラーとなります。
2. SeriesからDataFrame(se=>df)
SeriesからDataFrameを作る場合です。
Seriesを行とするか、列とするか、或いは、複数のSeriesの場合で、分けて説明します。
2.1 行にする場合
この場合、pd.DataFrame()の引数にseをそのまま指定して、
df = pd.DataFrame(se)
と書きます。
指定したseのindexがそのままdfのindexになり、nameはカラム名(列名)になります。
2.2 列にする場合
SeriesをListにして指定すれば、列となります。この時、Seriesのnameがindex名となります。
df2 = pd.DataFrame([se])
ここで、seを[]でくくるのを忘れないでください。[]でくくる事でListになります。
2.3 複数のSeriesの場合
(a) 列方向への連結
連結の話に帰着しますが、pd.concat([])
を使って、
df = pd.concat([se1, se2], axis=1)
と書きます。
【ポイント】
.concat()
の中は[]でくくること、axis=1
を指定するのを忘れないように注意してください。
(b) 行方向への連結
se1, se2をListで指定して、つまり[se1, se2]のように[]でくくって、
df = pd.DataFrame([se1, se2])
と書きます。