如何重塑 Pandas 系列?

pythonserver side programmingprogramming

我们可以使用 Transpose、重塑方法和 melt 函数等方式重塑 Pandas 系列。Pandas 系列是一个一维标记数组,可以保存任何类型的数据(整数、浮点数、字符串等)。它类似于 NumPy 数组,但每个元素都有一个关联的索引,可用于访问单个值。重塑是指改变 Pandas 系列的形状或结构,以便以各种方式使用数据。

算法

使用不同方法重塑 Pandas 系列的一般算法如下 -

  • 使用一些数据创建一个 Pandas 系列。

  • 使用 reshape() 方法将系列的形状更改为所需的形状。

  • 如果需要,使用 stack() 方法将系列从宽格式转换为长格式。

  • 如果需要,使用 melt() 方法将系列从宽格式取消旋转为长格式。

  • 如果需要,使用 unstack() 方法将系列从长格式旋转为宽格式。

  • 使用 pivot() 方法将系列从长格式旋转为宽格式,如果需要。

  • 如果需要,使用 T 属性转置 Series。

方法 1:使用 Transpose 属性

转置函数 (T) 可用于切换 Series 的行和列。当我们想要以不同的方式可视化数据时,这很有用。

语法

此处,T 是属性而非方法,因此使用它时无需使用括号。此外,由于它是属性而非方法,因此它不能接受任何参数。 T 属性返回一个行和列互换的新 DataFrame。

示例

在下面的示例中,我们创建了一个 pandas 系列,然后使用 transpose 函数转置了该 pandas 系列,最后将转置后的系列打印为输出。

import pandas as pd

# 创建系列
s = pd.Series([1, 2, 3, 4])

# 转置系列
s_transposed = s.T

# 打印转置后的系列
print(s_transposed)

输出

0    1
1    2
2    3
3    4
dtype: int64

方法 2:使用 reshape 方法。

reshape 方法可用于改变 Series 的形状。此方法要求新形状与原始形状兼容。

语法

DataFrame.reshape(shape[, order])

此处,shape 参数指定数组的新维度,而可选 order 参数指定数组元素的排列顺序。

示例

在下面的示例中,使用 values.reshape() 方法重塑了 pandas 系列。首先创建一个包含 1 到 9 的值的系列。然后使用 values.reshape(3,3) 将系列重塑为大小为 3x3 的矩阵。

import pandas as pd
import numpy as np

# 创建一个系列
s = pd.Series(np.arange(1, 10))

# 重塑系列
s_reshaped = s.values.reshape((3, 3))

# 打印重塑的系列
print(s_reshaped)

输出

[[1 2 3]
 [4 5 6]
 [7 8 9]]

方法 3:使用 Melt 函数

melt 函数可用于取消系列的透视。此函数创建一个新的数据框,其中原始 Series 中的每个唯一值占一列,每个唯一值组合占一行。

语法

DataFrame.melt([id_vars, value_vars, ...], ...)

此处,id_vars 参数指定要用作标识符变量的列,value_vars 参数指定要取消透视的列,其他参数可用于自定义输出。

示例

在下面的示例中,我们首先使用 reset_index 方法将 Series 转换为 DataFrame,该方法创建一个包含原始 Series 索引值的新列"index"。然后,我们在此 DataFrame 上使用 melt 函数,指定 'index' 作为 id_vars 参数,指定 '0'(包含原始 Series 值的列的名称)作为 value_vars 参数。

import pandas as pd

# 创建 Series
s = pd.Series({'A': 1, 'B': 2, 'C': 3})

# 使用 reset_index() 将 Series 转换为 DataFrame
df = s.reset_index()

# 融化 DataFrame
df_melted = pd.melt(df, id_vars='index', value_vars='0')

# 打印融化的 DataFrame
print(df_melted)

输出

  index variable  value
0     A        0      1
1     B        0      2
2     C        0      3

方法 4:使用 unstack() 方法

Pandas 中的 unstack() 方法用于将多级索引 Series 或 DataFrame 重塑为宽格式。该方法本质上将多级索引的最内层旋转为新 DataFrame 的列。 unstack() 方法是 stack() 方法的逆方法。

语法

Series.unstack(level=-1, fill_value=None)

此处,level 参数指定要解堆的索引级别,而 fill_value 参数指定要填充缺失值的值。

示例

在下面的示例中,我们首先创建一个多级索引 DataFrame df,其中包含两个索引级别"First"和"Second"。然后,我们在 DataFrame 上使用

unstack() 方法将最内层级别"Second"旋转为新 DataFrame 的列。生成的 DataFrame df_unstacked 包含列 'A' 和 'B',索引 'First' 和 'Second' 的原始级别保留为行标签。

import pandas as pd

# 创建多级索引 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=pd.MultiIndex.from_tuples([('X', 'a'), ('X', 'b'), ('Y', 'c')], names=['First', 'Second']))

# 拆分 DataFrame
df_unstacked = df.unstack()

# 打印拆分后的 DataFrame
print(df_unstacked)

输出

          A              B          
Second    a    b    c    a    b    c
First                               
X       1.0  2.0  NaN  4.0  5.0  NaN
Y       NaN  NaN  3.0  NaN  NaN  6.0

方法 5:使用 pivot() 方法

Pandas 中的 pivot() 方法用于将 DataFrame 从长格式重塑为宽格式。该方法采用三个参数:索引、列和值。 index 参数指定要用作结果 DataFrame 的行索引的列,columns 参数指定要用作结果 DataFrame 的列索引的列,values 参数指定要用作结果 DataFrame 的值的列。

语法

DataFrame.pivot([index, columns, values])

此处,index 参数指定要用作行索引的列,columns 参数指定要用作列索引的列,values 参数指定要用作数据值的列。

示例

在下面的示例中,我们首先创建一个长格式 DataFrame df,其中包含三列:"Year", '季度' 和 '销售额'。然后,我们在 DataFrame 上使用 pivot() 方法,指定 '年份' 作为索引参数,'季度' 作为列参数,'销售额' 作为值参数。生成的 DataFrame df_pivoted 有两列"Q1"和"Q2",以"Year"作为行索引。

import pandas as pd

# 创建长格式 DataFrame
df = pd.DataFrame({'Year': [2019, 2019, 2020, 2020], 'Quarter': ['Q1', 'Q2', 'Q1', 'Q2'], 'Sales': [100, 200, 150, 250]})

# 透视 DataFrame
df_pivoted = df.pivot(index='Year', columns='Quarter', values='Sales')

# 打印透视后的 DataFrame
print(df_pivoted)

输出

Quarter   Q1   Q2
Year             
2019     100  200
2020     150  250

结论

在本文中,我们讨论了如何使用转置、重塑和融化函数等方法重塑 Pandas 系列。我们可以重塑 Pandas 系列,将数据转换为不同的格式,以便进行可视化、聚合或数据分组,以及将多个数据系列合并和组合到数据框中。


相关文章