综合案例:Python 数据处理——从Excel文件到数据分析
适合对象:零编程基础的大一新生
 课程目标:掌握使用Python处理Excel数据的基本方法,包括读取、清洗、处理和保存数据,为进一步的数据分析打下基础。
课程大纲
模块1:Pandas入门——数据分析的利器
1.1 什么是Pandas?
- 生活类比:就像Excel是处理表格数据的工具一样,Pandas是Python中处理表格数据的专业库。
- 编程场景:处理Excel、CSV等格式的结构化数据。
1.2 为什么选择Pandas?
- 易用性:语法简洁,学习曲线平缓。
- 高效性:基于NumPy,性能优秀。
- 功能全面:涵盖数据分析的各个环节。
- 广泛应用:数据科学、金融分析、商业智能等领域。
1.3 安装和导入Pandas
- 安装:在命令行中运行以下命令之一:# 普通安装 pip install pandas# 使用清华源安装(推荐,速度更快) pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple# 升级安装 pip install --upgrade pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
- 导入:import pandas as pd
1.4 动手实验
- 任务:导入pandas库并检查版本。
- 提示:使用pd.__version__查看版本。
- 参考答案:import pandas as pd print(pd.__version__)
模块2:读取Excel数据——让Python认识你的数据
2.1 数据结构简介
- DataFrame:二维表格数据结构,类似Excel表格。
- Series:一维数组,类似列表或Excel中的一列。
2.2 读取Excel文件
-  核心函数: pd.read_excel()
 数据示例:
 下表展示了销售数据.xlsx文件中的前10条内容。完整内容打开百度网盘下载(提取码: 2afy)| 客户ID | 产品名称 | 销售数量 | 销售价格 | 销售日期 | |--------|----------|----------|----------|----------| | 123456 | 手机 | 20 | 3000 | 2023/1/15 0:00 | | 654321 | 电脑 | 15 | 5000 | 2023/2/20 0:00 | | 789012 | 平板 | 18 | 2500 | 2023/3/10 0:00 | | 345678 | 耳机 | 30 | 500 | 2023/4/5 0:00 | | 987654 | 键盘 | 25 | 300 | 2023/5/12 0:00 | | 456789 | 鼠标 | 40 | 100 | 2023/6/18 0:00 | | 234567 | 充电器 | 50 | 80 | 2023/7/25 0:00 | | 321098 | 硬盘 | 12 | 800 | 2023/8/30 0:00 | | 876543 | 显示器 | 8 | 1500 | 2023/9/15 0:00 | | 543210 | 音箱 | 10 | 399.99 | 2023/10/1 0:00 | | …… | …… | …… | …… | …… |
-  示例演示: import pandas as pd# 读取Excel文件 df = pd.read_excel('D:/销售数据.xlsx')# 显示前5行数据 print(df.head(5))输出结果: 客户 ID 产品名称 销售数量 销售价格 销售日期 0 123456 手机 20 3000.0 2023-01-15 1 654321 电脑 15 5000.0 2023-02-20 2 789012 平板 18 2500.0 2023-03-10 3 345678 耳机 30 500.0 2023-04-05 4 987654 键盘 25 300.0 2023-05-12
-  代码详解: - pd.read_excel():pandas读取Excel文件的函数- 自动识别Excel文件格式(.xlsx或.xls)
- 将Excel数据转换为DataFrame对象便于处理
 
- df.head(5):显示数据框的前5行- 默认显示前5行,也可以指定其他数字,如head(3)显示前3行
- 用于快速预览数据结构和内容
 
 
2.3 常用参数说明
- file_path:文件路径。
- sheet_name:工作表名称(默认为第一个工作表)。
- header:指定哪一行作为列名(默认为0,即第一行)。
2.4 互动练习
- 任务:读取Excel文件并显示前3行数据。
- 提示:使用head(3)方法。
- 参考答案:import pandas as pd df = pd.read_excel('D:/销售数据.xlsx') print(df.head(3))
模块3:数据清洗——处理不完美的数据
3.1 检查缺失值
-  核心方法: isnull()和any()
-  示例演示: # 检查数据中是否存在缺失值 missing_values = df.isnull().any(axis=1)# 输出存在缺失值的数据行 print(df[missing_values])
-  代码详解: - df.isnull():创建一个布尔矩阵,标记所有缺失值(NaN)的位置- 对于每个单元格,如果是缺失值则返回 True,否则返回 False
 
- .any(axis=1):沿着行方向(axis=1)检查每一行- 如果一行中任何一个单元格是缺失值,整行就标记为 True
- 如果一行中没有任何缺失值,整行就标记为 False
 
- missing_values:得到一个布尔序列,长度等于数据框的行数- 每个元素表示对应行是否包含缺失值
 
- df[missing_values]:使用布尔索引筛选出包含缺失值的行- 只显示那些至少有一个缺失值的完整行
 
 
3.2 填充缺失值
- 核心方法:fillna()
- 示例演示:# 将缺失值统一填充为指定值 df = df.fillna(99999)# 输出填充结果 print(df[missing_values])
3.3 删除重复行
-  核心方法: duplicated()和drop_duplicates()
-  示例演示: # 检查并打印重复行 duplicated_rows = df.duplicated(keep=False) if duplicated_rows.any():print("重复行的行号及内容:")print(df[duplicated_rows])# 删除重复行 df = df.drop_duplicates()# 输出删除重复行后的数据行数 print(len(df))
-  代码详解: - drop_duplicates()是pandas的删除重复行方法- 默认情况下,它会比较所有列的值来判断是否为重复行
- 如果多行完全相同,只保留第一行,删除后面的重复行
 
- duplicated(keep=False)参数说明:- keep=False表示所有重复行都标记为True,便于显示所有重复项
 
 
3.4 数据格式统一
-  核心方法: round()
-  示例演示: # 统一数值列的数据格式,四舍五入到指定小数位 df['销售价格'] = df['销售价格'].round(2)# 输出处理后的前5行数据 print(df.head(5))
-  代码详解: - df['销售价格']:选择数据框中的"销售价格"列- 这是pandas的列选择语法,类似于Excel中选择一列
 
- round(2):对选中的列进行四舍五入处理- round()是pandas的数值处理方法
- 参数2表示保留2位小数
- 会对列中的每个数值进行四舍五入
 
 
3.5 综合练习
- 任务:处理一个包含缺失值和重复行的销售数据文件。
- 提示:按顺序执行检查缺失值、填充缺失值、删除重复行、统一数据格式等操作。
- 参考答案:import pandas as pd# 读取数据 df = pd.read_excel('D:/销售数据.xlsx')# 检查缺失值 missing_values = df.isnull().any(axis=1) print("包含缺失值的行:") print(df[missing_values])# 填充缺失值 df = df.fillna(99999)# 删除重复行 df = df.drop_duplicates()# 统一数据格式 df['销售价格'] = df['销售价格'].round(2)# 显示处理结果 print("处理后的前5行数据:") print(df.head(5))
模块4:数据筛选与保存——提取你需要的数据
4.1 列选择
- 单列选择:df['列名']
- 多列选择:df[['列名1', '列名2']]
- 示例演示:# 选择单列 product_names = df['产品名称'] print(product_names.head())# 选择多列 selected_columns = df[['产品名称', '销售数量']] print(selected_columns.head())
4.2 保存数据到Excel
-  核心函数: to_excel()
-  示例演示: # 筛选需要的列 df_filtered = df[['产品名称', '销售数量']]# 保存为新文件 df_filtered.to_excel('D:/筛选结果.xlsx', index=False)
-  代码详解: - index=False:参数设置,不保存行索引- 如果设为True,会在Excel中多出一列显示行号(0, 1, 2…)
- 设为False可以避免在Excel中显示不必要的行索引
 
 
4.3 参数说明
- file_path:保存的文件路径。
- index:是否保存行索引(通常设为False)。
4.4 综合挑战
- 任务:从销售数据中提取产品名称和销售数量两列,保存为新文件。根据公式「销售总额 = 销售数量 × 销售价格」计算新的「销售总额」列,并将其添加到DataFrame中,最后将包含销售总额的数据保存到新文件。
- 提示:使用列选择和保存方法。
- 参考答案:import pandas as pd# 读取数据 df = pd.read_excel('D:/销售数据.xlsx')# 筛选需要的列 df_filtered = df[['产品名称', '销售数量']]# 保存为新文件 df_filtered.to_excel('D:/产品销售数量.xlsx', index=False)# 根据公式「销售总额 = 销售数量 × 销售价格」计算新的「销售总额」列,并将其添加到DataFrame中 df['销售总额'] = df['销售数量'] * df['销售价格']# 将包含销售总额的数据保存到新文件 df.to_excel('D:/处理结果_含销售总额.xlsx', index=False)print("数据已保存到:D:/处理结果_含销售总额.xlsx")
模块5:完整案例实践——构建数据处理流水线
5.1 案例目标
 构建一个完整的数据处理流水线,包括读取、清洗、处理和保存数据。
5.2 完整代码示例
import pandas as pd# (1)读取Excel文件
df = pd.read_excel('D:/销售数据.xlsx')
print("原始数据前5行:")
print(df.head(5))# (2)检查缺失值
missing_values = df.isnull().any(axis=1)
if missing_values.any():print("包含缺失值的行:")print(df[missing_values])
else:print("数据中没有缺失值")# (3)填充缺失值
df = df.fillna(99999)
print("填充缺失值后的数据:")
print(df[missing_values])# (4)删除重复行
original_rows = len(df)
df = df.drop_duplicates()
new_rows = len(df)
print(f"删除了{original_rows - new_rows}行重复数据")# (5)统一数据格式
df['销售价格'] = df['销售价格'].round(2)
print("统一格式后的前5行数据:")
print(df.head(5))# (6)筛选并保存数据
df_filtered = df[['产品名称', '销售数量']]
df_filtered.to_excel('D:/处理结果.xlsx', index=False)
print("数据已保存到:D:/处理结果.xlsx")# (7)根据公式「销售总额 = 销售数量 × 销售价格」计算新的「销售总额」列,并将其添加到DataFrame中
df['销售总额'] = df['销售数量'] * df['销售价格']
df.to_excel('D:/处理结果_含销售总额.xlsx', index=False)
print("数据已保存到:D:/处理结果_含销售总额.xlsx")
- 代码详解: - df['销售总额'] = df['销售数量'] * df['销售价格']:根据公式计算销售总额并添加新列- 使用pandas的向量化操作,自动对每行的销售数量和销售价格进行相乘运算
- 将计算结果作为新列"销售总额"添加到DataFrame中
 
- df.to_excel('D:/处理结果_含销售总额.xlsx', index=False):将包含新列的完整数据保存到Excel文件- index=False表示不保存行索引到Excel文件中
- 如果文件已存在,将被覆盖;如果不存在,将创建新文件
 
 
5.3 代码说明
- 每个步骤都有明确的注释,便于理解。
- 添加了条件判断,使程序更加健壮。
- 输出关键信息,便于跟踪处理过程。
课程总结与作业
-  总结: - Pandas是处理结构化数据的强大工具。
- 数据处理流程包括读取、清洗、处理和保存。
- 缺失值、重复行是常见数据问题,需要妥善处理。
- 通过列选择可以提取需要的数据子集。
 
-  课后作业: - 作业1:使用提供的学生成绩Excel文件,检查是否存在缺失值,如果存在则填充为0。
- 作业2:从处理后的数据中筛选出数学成绩大于80分的学生记录,保存为新文件。
 
-  参考资料: - Pandas 官方文档:Pandas用户指南
- Pandas API参考:Pandas API
 
-  软件安装包下载地址: - 下载地址(提取码: ygrr)
 
课程特色:
- 生活化类比:用Excel等常见工具类比,降低学习门槛。
- 逐步引导:从基础概念到完整案例,层层递进。
- 实战驱动:通过真实数据处理任务强化应用能力。
- 避坑指南:提前预警缺失值、重复行等常见数据问题。
