Pandas Series を DataFrame に変換

Sathiya Sarathi 2023年1月30日
  1. pandas.DataFrame() を使って単一の Pandas SeriesDataFrame に変換する
  2. 単一の Pandas の SeriesDataFrame に変換するには pandas.Series.to_frame() を使用する
  3. 複数の Pandas 系列を DataFrame に変換する
Pandas Series を 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 SeriesDataFrame に変換する

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 の SeriesDataFrame に変換するには 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 Series