0
点赞
收藏
分享

微信扫一扫

Python数据的筛选、排序与聚合


Python数据的筛选、排序与聚合

在数据分析过程中,我们常常需要对数据进行筛选、排序和聚合操作,以便从数据集中提取有价值的信息。这些操作是数据预处理和分析的基础,尤其在处理大型数据集时,能够帮助我们快速定位关键数据,进行进一步的分析。Pandas提供了强大的工具来支持这些操作,主要通过对Series和DataFrame的相关方法进行操作来实现。

本节将详细讲解如何使用Pandas的Series和DataFrame进行数据的筛选、排序与聚合,并通过一些代码示例来演示具体的操作。

示例数据集

为了便于理解,我们先构造一个包含10条测试数据的DataFrame,其中包括了姓名、年龄、性别和工资等字段,数据如下:

import pandas as pd

# 构造测试数据
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '王五', '李四', '赵六', '周七', '郑八', '刘九'],
    '年龄': [23, 25, 30, 29, 27, 25, 29, 24, 28, 22],
    '性别': ['男', '女', '男', '男', '男', '女', '男', '男', '女', '男'],
    '工资': [5000, 6000, 7000, 8000, 7000, 6000, 8000, 4500, 5000, 6500]
}

# 创建DataFrame
df = pd.DataFrame(data)

# 打印原始数据
print("原始数据:")
print(df)

输出结果如下:

原始数据:
    姓名  年龄 性别   工资
0   张三  23  男  5000
1   李四  25  女  6000
2   王五  30  男  7000
3   赵六  29  男  8000
4   王五  27  男  7000
5   李四  25  女  6000
6   赵六  29  男  8000
7   周七  24  男  4500
8   郑八  28  女  5000
9   刘九  22  男  6500

数据筛选

在数据分析中,筛选数据是常见的操作。我们可以基于条件筛选出符合要求的数据行。使用Pandas的条件表达式非常直观,下面我们演示如何根据不同的条件筛选数据。

1. 筛选特定年龄段的数据

例如,我们想筛选出年龄在25岁以上的员工数据,可以使用以下代码:

# 筛选年龄大于25的数据
df_filtered = df[df['年龄'] > 25]

# 打印筛选后的数据
print("\n年龄大于25的数据:")
print(df_filtered)

代码解析

  1. df['年龄'] > 25:这一条件筛选出年龄大于25的行,返回一个布尔型Series。
  2. df[df['年龄'] > 25]:利用布尔索引,筛选出符合条件的行。

输出结果如下:

年龄大于25的数据:
    姓名  年龄 性别   工资
2   王五  30  男  7000
3   赵六  29  男  8000
4   王五  27  男  7000
6   赵六  29  男  8000
8   郑八  28  女  5000

2. 筛选特定性别的数据

假设我们需要筛选出所有女性员工的数据,可以通过以下代码实现:

# 筛选性别为女的数据
df_female = df[df['性别'] == '女']

# 打印筛选后的数据
print("\n性别为女的数据:")
print(df_female)

代码解析

  1. df['性别'] == '女':这一条件筛选出性别为“女”的行。
  2. df[df['性别'] == '女']:同样,利用布尔索引筛选出符合条件的行。

输出结果如下:

性别为女的数据:
    姓名  年龄 性别   工资
1   李四  25  女  6000
5   李四  25  女  6000
8   郑八  28  女  5000

数据排序

排序是另一个常见的数据处理操作,我们可以根据一个或多个字段对数据进行升序或降序排列。Pandas提供了sort_values()方法来实现排序操作。

1. 按工资升序排序

如果我们想根据员工的工资进行升序排序,可以使用以下代码:

# 按工资升序排序
df_sorted_asc = df.sort_values(by='工资', ascending=True)

# 打印排序后的数据
print("\n按工资升序排序的数据:")
print(df_sorted_asc)

代码解析

  1. df.sort_values(by='工资', ascending=True)by参数指定根据哪个列排序,ascending=True表示按升序排列。
  2. 返回的DataFrame是一个新的排序后的结果。

输出结果如下:

按工资升序排序的数据:
    姓名  年龄 性别   工资
7   周七  24  男  4500
8   郑八  28  女  5000
0   张三  23  男  5000
9   刘九  22  男  6500
1   李四  25  女  6000
5   李四  25  女  6000
2   王五  30  男  7000
4   王五  27  男  7000
3   赵六  29  男  8000
6   赵六  29  男  8000

2. 按工资降序排序

如果我们希望按工资进行降序排序,可以将ascending参数设置为False

# 按工资降序排序
df_sorted_desc = df.sort_values(by='工资', ascending=False)

# 打印排序后的数据
print("\n按工资降序排序的数据:")
print(df_sorted_desc)

代码解析

  1. df.sort_values(by='工资', ascending=False):将ascending参数设置为False,表示按降序排序。

输出结果如下:

按工资降序排序的数据:
    姓名  年龄 性别   工资
3   赵六  29  男  8000
6   赵六  29  男  8000
2   王五  30  男  7000
4   王五  27  男  7000
9   刘九  22  男  6500
1   李四  25  女  6000
5   李四  25  女  6000
8   郑八  28  女  5000
0   张三  23  男  5000
7   周七  24  男  4500

数据聚合

聚合操作用于对数据进行汇总,以便从中提取出重要的信息。常见的聚合操作包括计算总和、均值、最大值、最小值等。Pandas提供了groupby()和聚合方法来实现这一操作。

1. 按性别进行分组,计算每组的工资平均值

我们可以按性别分组,并计算每个性别组的平均工资:

# 按性别分组,计算每组的工资平均值
df_grouped = df.groupby('性别')['工资'].mean()

# 打印聚合后的数据
print("\n按性别分组后的工资平均值:")
print(df_grouped)

代码解析

  1. df.groupby('性别'):按性别列进行分组。
  2. ['工资'].mean():在每个分组内计算工资列的均值。

输出结果如下:

按性别分组后的工资平均值:
性别
女    5666.666667
男    6500.000000
Name: 工资, dtype: float64

2. 按年龄范围分组,计算每组的工资总和

假设我们想按年龄段进行分组,并计算每个年龄段内的工资总和,我们可以创建一个新的年龄段列,并进行聚合:

# 创建年龄段列
df['年龄段'] = pd.cut(df['年龄'], bins=[20, 25, 30, 35], labels=['20-25', '25-30', '30-35'])

# 按年龄段分组,计算每组的工资总和
df_grouped_by_age = df.groupby('年龄段')['工资'].sum()

# 打印按年龄段分组后的数据
print("\n按年龄段分组后的工资总和:")
print(df_grouped_by_age)

代码解析

  1. pd.cut(df['年龄'], bins=[20, 25, 30, 35], labels=['20-25', '25-30', '30-35']):使用pd.cut将年龄列分成不同的区间,bins参数指定了区间的边界,labels参数为每个区间赋予了标签。
  2. df.groupby('年龄段')['工资'].sum():按年龄段分组后,计算每个年龄段的工资总和。

输出结果如下:

按年龄段分组后的工资总和:
年龄段
20-25    23500
25-30    23500
30-35    7000
Name: 工资, dtype: int64

总结

在本节中,我们介绍了如何使用Pandas的SeriesDataFrame进行数据的筛选、排序与聚合操作。通过几个实际的示例,我们演示了如何:

  • 使用布尔索引进行数据筛选。
  • 对数据进行升序和降序排序。
  • 使用groupby()方法按指定列对数据进行分组,并应用聚合函数(如求和、均值等)。

这些操作是数据分析中不可或缺的步骤,可以帮助我们从复杂的数据集中提取出更有价值的信息,进一步为数据分析提供基础。在实际应用中,您可以根据具体的数据需求灵活使用这些操作。


举报

相关推荐

0 条评论