将 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