將 Pandas Series 轉換為 DataFrame

Sathiya Sarathi 2023年1月30日
  1. 使用 pandas.DataFrame() 將單個 Pandas Series 轉換為 DataFrame
  2. 使用 pandas.Series.to_frame() 將單個 Pandas Series 轉換為 DataFrame
  3. 將多個 Pandas Series 轉換為 Dataframe
將 Pandas Series 轉換為 DataFrame

從派生的或現有的 Pandas 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

可以使用 DataFrame() 建構函式,將 Pandas Series 作為引數,將 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.to_frame() 將單個 Pandas Series 轉換為 DataFrame

本函式將給定的 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

在某些情況下,給定的 Series 沒有任何名稱。在這種情況下,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 的新列,並且現有的索引已經被提升為列。可以使用提供給 reset_index() 函式的 name 引數對名為 0 的列進行重新命名,如下所示。

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 Series 轉換為 Dataframe

上面的例子已經證明了將一個單一的 Pandas Series 轉換為 Dataframe 的能力。如果有多個 Series,而這些需要拼接成一個單一的 Dataframe 呢?在建立單個系列後,可以通過使用 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