Python 基础入门 Day20

欢迎来到 Python 基础入门 Day20!在 Day19 中,我们初步学习了 Pandas 库的基本概念和操作方法,今天我们将深入学习 Pandas 的数据清洗、分组聚合数据可视化的结合应用。这些技能对于数据分析师来说是至关重要的,因为大多数数据工作涉及到对数据的清洗和聚合操作。


目录

  1. 数据清洗:处理缺失数据
  2. 数据清洗:数据类型转换
  3. 分组与聚合操作
  4. 使用 Pandas 和 Seaborn 结合进行数据可视化
  5. 小结与练习

一、数据清洗:处理缺失数据

在数据分析中,经常会遇到缺失值。Pandas 提供了多种方法来处理缺失数据。

1.1 检查缺失值

使用 isnull() 方法来检测缺失值,返回布尔类型的数据框。

# 检查是否存在缺失值 df.isnull()

1.2 删除缺失值

可以使用 dropna() 删除含有缺失值的行或列。

# 删除包含缺失值的行 df.dropna(axis=0, inplace=True) # 删除包含缺失值的列 df.dropna(axis=1, inplace=True)

1.3 填充缺失值

如果不想删除缺失值,可以选择使用 fillna() 填充缺失值。常用的填充值包括均值、中位数或自定义值。

# 填充缺失值为均值 df["column_name"].fillna(df["column_name"].mean(), inplace=True) # 填充缺失值为固定值 df["column_name"].fillna(0, inplace=True)


二、数据清洗:数据类型转换

有时候数据的类型不符合预期(例如,数字被当作字符串),这时需要进行数据类型转换。

2.1 转换数据类型

使用 astype() 方法将数据转换为指定类型。

# 将年龄列转换为整数类型 df["Age"] = df["Age"].astype(int) # 将日期列转换为日期类型 df["Date"] = pd.to_datetime(df["Date"])

2.2 转换字符串为类别类型

对于分类变量,可以将字符串转换为 category 类型,从而节省内存并提高效率。

# 将性别列转换为类别类型 df["Gender"] = df["Gender"].astype("category")


三、分组与聚合操作

Pandas 提供了强大的分组与聚合功能,常用于对数据进行汇总、平均值计算、计数等操作。

3.1 按条件分组

使用 groupby() 方法按列进行分组,并对每个组进行操作。

# 按照 "Gender" 列分组并计算每组的平均值 grouped = df.groupby("Gender").mean() # 按照多个列进行分组 grouped_multi = df.groupby(["Gender", "Age"]).agg({"Salary": "mean", "Bonus": "sum"})

3.2 聚合操作

agg() 方法允许对每个组执行不同的聚合操作,比如计算均值、最大值、最小值等。

# 对每个组计算多个聚合操作 grouped = df.groupby("Gender").agg({ "Salary": ["mean", "sum", "max"], "Age": "mean" })


四、使用 Pandas 和 Seaborn 结合进行数据可视化

今天我们将结合 PandasSeaborn,将聚合后的数据可视化,让我们更直观地分析数据。

4.1 绘制分组聚合后的柱状图

假设我们按性别对薪资进行了聚合,现在我们希望绘制每个性别的平均薪资柱状图。

import seaborn as sns import matplotlib.pyplot as plt # 按性别分组并计算薪资的平均值 grouped = df.groupby("Gender")["Salary"].mean().reset_index() # 使用 Seaborn 绘制柱状图 sns.barplot(data=grouped, x="Gender", y="Salary") plt.title("Average Salary by Gender") plt.show()

4.2 绘制小费与总账单的关系图

我们可以使用 Seaborn 绘制总账单与小费之间的关系图。

# 使用 Seaborn 绘制散点图 sns.scatterplot(data=df, x="total_bill", y="tip", hue="time") plt.title("Tip vs Total Bill") plt.show()

4.3 使用聚合数据绘制折线图

我们还可以对分组后的数据绘制折线图,比如每个年龄段的平均薪资变化。

# 按年龄分组计算平均薪资 age_salary = df.groupby("Age")["Salary"].mean().reset_index() # 绘制折线图 sns.lineplot(data=age_salary, x="Age", y="Salary") plt.title("Average Salary by Age") plt.show()


五、小结与练习

今天,我们学习了如何进行数据清洗和处理,并深入了解了如何使用 Pandas 进行数据分组和聚合操作。我们还结合了 Seaborn 库,通过可视化展示了聚合后的数据。

今日练习题:

  1. 创建一个包含 Product(商品名称)、Price(商品价格)、Quantity(销售数量)三列的数据框。
  2. 按照 Product 对数据进行分组,并计算每个商品的总销售额(Price * Quantity)。
  3. 使用 Seaborn 绘制一个柱状图,显示每个商品的总销售额。
  4. 假设数据框中有一个缺失值列,请尝试填充该列的缺失值为该列的均值,并进行数据类型转换。

下一节预告:在 Day21 中,我们将开始学习 Pandas 的高级功能,如数据透视表、合并与连接操作等,帮助你进一步提升数据分析技能。敬请期待!


希望你今天的学习顺利!如果有任何问题,欢迎随时讨论 😊。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注