Pandas Series を DataFrame に変換
- 
          
            pandas.DataFrame()を使って単一の PandasSeriesをDataFrameに変換する
- 
          
            単一の Pandas の SeriesをDataFrameに変換するにはpandas.Series.to_frame()を使用する
- 複数の Pandas 系列を DataFrame に変換する
 
派生または既存の Series から新しいカラムを作成することは、フィーチャエンジニアリングの中では手ごわい作業です。新しく作成した Series やカラムは、pandas のネイティブ関数を使って Dataframe に変換することができます。この記事では、Pandas の Series を Dataframe に変換する方法を紹介します。
以下の例では、以下のスニペットを使って作成した Dataframe で作業を行います。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series)
出力:
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64
pandas.DataFrame() を使って単一の Pandas Series を DataFrame に変換する
Pandas の Series を引数に送ることで、DataFrame() コンストラクタを使って Series を Dataframe に変換することができます。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(pd.DataFrame(df_series, columns=["A"]))
出力:
    A
a  81
b  37
c  25
d  77
e  72
f   9
g  20
h  80
i  69
j  79
上で見たように、この関数の出力は Dataframe を返します。
単一の Pandas の Series を DataFrame に変換するには pandas.Series.to_frame() を使用する
この関数は、与えられた Pandas の Series を Dataframe に変換します。カラムの名前は name 引数で設定できます。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series.to_frame(name="A"))
出力:
    A
a  44
b  47
c  64
d  67
e  67
f   9
g  83
h  21
i  36
j  87
与えられた系列に名前がない場合もあるでしょう。このような状況では、reset_index() メソッドが便利です。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index())
出力:
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64
  index   0
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87
上で見たように、作成された DataFrame には 0 という名前の新しいカラムが含まれており、既存のインデックスは昇格されたカラムになっています。0 という名前のカラムは、以下のように reset_index() 関数に渡すことができる name 引数を用いて名前を変更することができます。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index(name="A"))
出力:
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64
  index   A
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87
複数の Pandas 系列を DataFrame に変換する
上記の例では、単一の Pandas Series を Dataframe に変換する能力を実証しました。複数の Series があり、それらを 1つの Dataframe に結合する必要がある場合はどうでしょうか?個々の Series を作成した後、concat() 関数を使用して連結することで DataFrame を作成することができます。
import pandas as pd
import numpy as np
np.random.seed(0)
df_series1 = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series2 = pd.Series(
    np.random.randint(40, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series3 = pd.Series(
    np.random.randint(80, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_stitched = pd.concat([df_series1, df_series2, df_series3], axis=1)
print(df_stitched)
出力:
    0   1   2
a  44  46  97
b  47  64  85
c  64  64  93
d  67  52  88
e  67  98  89
f   9  41  99
g  83  78  96
h  21  79  99
i  36  63  85
j  87  86  95
関数 pd.concat() には引数 axis=1 が含まれており、これは列に沿った追加に対応しています。axis が指定されていない場合は、すべての DataFrame 間で行のマージや結合が行われます。
関連記事 - Pandas DataFrame
- Pandas DataFrame の列ヘッダーをリストとして取得する方法
- Pandas DataFrame 列を削除する方法
- Pandas で DataFrame 列を日時に変換する方法
- Pandas DataFrame で浮動小数点数 float を整数 int に変換する方法
- Pandas DataFrame を 1つの列の値で並べ替える方法
- Pandas group-by と Sum の集計を取得する方法