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 の集計を取得する方法