最終更新日: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つしか指定していない。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd
li1 = ['A', 'B', 'C']
li2 = [10, 11, 12]
df1a = pd.DataFrame([li1, li2], columns=['clm0','clm1', 'clm2'])
print(df1a)
# clm0 clm1 clm2
#0 A B C
#1 10 11 12
1.2. Listを列として、列方向に連結
Listを列として扱い、これを列方向に連結する場合です。縦に広げて、右に連結するイメージです。
zipを使って、
pd.DataFrame(zip(li1, li2), columns=['clm0', 'clm1'])
と書きます。
行方向と同様に、columns=
、index=
で指定するListの数に注意してください。実際の数と指定した数が一致しないとエラーとなります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
df1b = pd.DataFrame(zip(li1, li2), columns=['clm0', 'clm1'])
print(df1b)
# clm0 clm1
#0 A 10
#1 B 11
#2 C 12
2. SeriesからDataFrame(se=>df)
SeriesからDataFrameを作る場合です。
Seriesを行とするか、列とするか、或いは、複数のSeriesの場合で、分けて説明します。
2.1 行にする場合
この場合、pd.DataFrame()の引数にseをそのまま指定して、
df = pd.DataFrame(se)
と書きます。
指定したseのindexがそのままdfのindexになり、nameはカラム名(列名)になります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
se1 = pd.Series([0, 1, 2], index=['i0', 'i1', 'i2'], name='SE1')
print(se1)
#i0 0
#i1 1
#i2 2
#Name: SE1, dtype: int64
#2.1
df2a = pd.DataFrame(se1)
print(df2a)
# SE1
#i0 0
#i1 1
#i2 2
2.2 列にする場合
SeriesをListにして指定すれば、列となります。この時、Seriesのnameがindex名となります。
df2 = pd.DataFrame([se])
ここで、seを[]でくくるのを忘れないでください。[]でくくる事でListになります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
df2b = pd.DataFrame([se1])
print(df2b)
# i0 i1 i2
#SE1 0 1 2
2.3 複数のSeriesの場合
(a) 列方向への連結
連結の話に帰着しますが、pd.concat([])
を使って、
df = pd.concat([se1, se2], axis=1)
と書きます。
【ポイント】
.concat()
の中は[]でくくること、axis=1
を指定するのを忘れないように注意してください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
se2 = pd.Series([10, 11, 12], index= ['i0', 'i1', 'i2'], name='SE2')
print(se2)
#i0 10
#i1 11
#i2 12
#Name: SE2, dtype: int64
df3a = pd.concat([se1, se2], axis=1)
print(df3a)
# SE1 SE2
#i0 0 10
#i1 1 11
#i2 2 12
(b) 行方向への連結
se1, se2をListで指定して、つまり[se1, se2]のように[]でくくって、
df = pd.DataFrame([se1, se2])
と書きます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
df3b = pd.DataFrame([se1, se2])
print(df3b)
# i0 i1 i2
#SE1 0 1 2
#SE2 10 11 12