欢迎来到 Python 基础入门 Day20!在 Day19 中,我们初步学习了 Pandas 库的基本概念和操作方法,今天我们将深入学习 Pandas 的数据清洗、分组聚合 和 数据可视化的结合应用。这些技能对于数据分析师来说是至关重要的,因为大多数数据工作涉及到对数据的清洗和聚合操作。
目录
- 数据清洗:处理缺失数据
- 数据清洗:数据类型转换
- 分组与聚合操作
- 使用 Pandas 和 Seaborn 结合进行数据可视化
- 小结与练习
一、数据清洗:处理缺失数据
在数据分析中,经常会遇到缺失值。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 结合进行数据可视化
今天我们将结合 Pandas
和 Seaborn
,将聚合后的数据可视化,让我们更直观地分析数据。
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 库,通过可视化展示了聚合后的数据。
今日练习题:
- 创建一个包含
Product
(商品名称)、Price
(商品价格)、Quantity
(销售数量)三列的数据框。 - 按照
Product
对数据进行分组,并计算每个商品的总销售额(Price * Quantity
)。 - 使用 Seaborn 绘制一个柱状图,显示每个商品的总销售额。
- 假设数据框中有一个缺失值列,请尝试填充该列的缺失值为该列的均值,并进行数据类型转换。
下一节预告:在 Day21 中,我们将开始学习 Pandas 的高级功能,如数据透视表、合并与连接操作等,帮助你进一步提升数据分析技能。敬请期待!
希望你今天的学习顺利!如果有任何问题,欢迎随时讨论 😊。