您的位置:

使用Pandas进行数据重塑的完整指南

一、基本数据结构

Pandas中的两个主要数据结构是Series和DataFrame。 Series是一个一维标记数组,可以保存任何数据类型。 DataFrame是具有行和列标签的二维表格,可以保存多种类型的数据。 在本指南中,我们将重点关注面向DataFrame的维度重塑。

以下是如何创建Series和DataFrame的示例代码:

import pandas as pd

# 创建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])

# 创建DataFrame
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8)})

在以上代码中,我们使用了NumPy中的NaN值来表示缺失的值。此外,我们还使用了`np.random.randn()`函数来生成随机数据,以便我们更好地理解如何进行数据重塑。

二、重塑操作

1. 堆叠和取消堆叠

堆叠是指将DataFrame中的列压缩到较小的行中。 取消堆叠是指将已压缩的行重新扩展为列。 以下是如何使用`stack()`和`unstack()`方法执行这些操作的示例:

# 创建一个df
df = pd.DataFrame({'学生': ['小明', '小明', '小红', '小红'],
                   '科目': ['数学', '语文', '数学', '语文'],
                   '成绩': [90, 88, 92, 85]})

# 堆叠操作
stacked_df = df.set_index(['学生', '科目']).stack()
stacked_df

# 取消堆叠操作
unstacked_df = stacked_df.unstack()
unstacked_df

在以上示例中,我们首先创建了一个包含学生姓名、科目和成绩的DataFrame。然后,我们使用`set_index()`方法将学生姓名和科目设置为索引,并使用`stack()`方法将列堆叠成行。最后,我们使用`unstack()`方法将已堆叠的行重新扩展为列。

2. 透视表

透视表是一种根据数据中的值来汇总数据的方法。可以使用Pandas中的`pivot_table()`函数轻松创建透视表。以下是一个示例代码:

# 创建数据
data = {'省份': ['江苏', '江苏', '山东', '山东', '广东'],
        '城市': ['南京', '苏州', '济南', '青岛', '广州'],
        '销售额': [100, 200, 150, 180, 120]}

df = pd.DataFrame(data)

# 创建透视表
pivot_table = pd.pivot_table(df, 
                             values='销售额', 
                             index='省份', 
                             columns='城市')

pivot_table

在以上代码中,我们首先创建了一个包含省份、城市和销售额的DataFrame。然后,使用`pivot_table()`函数创建了一个透视表。在`pivot_table()`函数中,我们指定要聚合的值、行和列。

3. 重命名列名

重命名列名是一项非常常见的操作。 在Pandas中,我们可以使用`rename()`方法来重命名DataFrame的列名。 以下是一个示例:

# 创建一个df
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6]})

# 重命名列名
df.rename(columns={'A': '新A', 'B': '新B'}, inplace=True)
df

在以上代码中,我们首先创建了一个包含'A'和'B'列的DataFrame。然后,使用`rename()`方法将列'A'和'B'重命名为'新A'和'新B'。

4. 删除列和行

时不时需要删除DataFrame中的列和行。 我们可以使用`drop()`方法来删除列和行。以下是一个示例:

# 创建一个df
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6],
                   'C': [7, 8, 9]})

# 删除列
df.drop('C', axis=1, inplace=True)

# 删除行
df.drop(0, inplace=True)
df

在以上代码中,我们首先创建了一个包含三列的DataFrame。然后,使用`drop()`方法删除了列'C'和第一行。

5. 数据类型转换

有时需要将DataFrame中的数据类型从一个类型转换为另一个类型。 在Pandas中,我们可以使用`astype()`方法来实现转换。 以下是示例:

# 创建一个df
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': ['4', '5', '6']})

# 将'B'列的类型从str转换为int
df['B'] = df['B'].astype(int)
df.dtypes

在以上代码中,我们首先创建了一个包含'A'和'B'列的DataFrame,其中'B'列的类型为str。然后,使用`astype()`方法将'B'列的类型从str转换为int。

三、总结

使用Pandas进行数据重塑是数据分析和数据处理中非常常见的操作。在本指南中,我们介绍了如何使用Pandas进行数据重塑:堆叠和取消堆叠,透视表,重命名列名,删除列和行,以及数据类型转换。掌握这些技能可以帮助您更好地理解、分析和处理数据。