在数据分析、自动化办公和日常工作中,Excel 是最常用的工具之一。然而,当面对成百上千个文件,或者需要进行复杂的数据清洗时,手动操作 Excel 既低效又容易出错。
Python 作为一门强大的编程语言,提供了多种处理 Excel 的方式。本教程将以最通俗易懂的方式,手把手教你如何使用 Python 读取 Excel 文件,并避开新手常犯的坑。
1. 为什么选择 Python 处理 Excel?
- 自动化:可以一键处理成百上千个 Excel 文件,无需重复打开复制粘贴。
- 高效性:对于数万行以上的数据,Python(尤其是 Pandas)的处理速度远超 Excel 软件本身。
- 灵活性:可以轻松连接数据库、进行复杂的统计分析或生成可视化图表。
2. 准备工作 (Prerequisites)
在开始写代码之前,你需要确保环境已经准备就绪。
2.1 环境要求
- 已安装 Python(建议版本 3.8 及以上)。
- 已安装代码编辑器(推荐 VS Code, PyCharm 或 Jupyter Notebook)。
2.2 安装必要的库
Python 处理 Excel 主要依赖第三方库。我们将介绍两个最主流的库:
- Pandas: 数据分析的神器,读取速度快,适合批量处理数据。
- Openpyxl: 专门用于读写
.xlsx 文件,适合需要精细操作单元格(如修改格式、公式)的场景。
打开终端(Terminal)或命令提示符(CMD),运行以下命令进行安装:
ounter(linepip install pandas openpyxl
注意:即使你主要使用 Pandas,通常也需要安装 openpyxl,因为 Pandas 底层读取 .xlsx 文件时依赖它作为引擎。
3. 实战演示:如何读取 Excel 文件
假设我们有一个名为 sales_data.xlsx 的文件,内容如下:
方法一:使用 Pandas 读取(推荐用于数据分析)
这是最常用、最简洁的方法。Pandas 会将 Excel 数据读取为一个表格对象,称为 DataFrame。
基础读取
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport pandas as pd# 1. 读取 Excel 文件# 默认读取第一个工作表 (Sheet)df = pd.read_excel('sales_data.xlsx')# 2. 打印前几行数据查看print("--- 文件内容预览 ---")print(df.head())
进阶读取技巧
read_excel 函数非常强大,支持多种参数配置:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport pandas as pd# 指定读取名为 'Sheet1' 的工作表# usecols='A:C' 表示只读取 A 到 C 列# header=0 表示第一行是表头(默认值)df = pd.read_excel( 'sales_data.xlsx', sheet_name='Sheet1', usecols='A:C', dtype={'销售额': float} # 强制指定某列的数据类型)print(df)
方法二:使用 Openpyxl 读取(推荐用于精细操作)
如果你不进行大规模数据计算,而是想逐个单元格读取数据(例如提取特定位置的配置信息),openpyxl 是更好的选择。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom openpyxl import load_workbook# 1. 加载工作簿wb = load_workbook('sales_data.xlsx')# 2. 获取指定的工作表ws = wb['Sheet1'] # 或者使用 wb.active 获取当前激活的表# 3. 读取特定单元格的值 (例如读取 A2 单元格)cell_value = ws['A2'].valueprint(f"A2单元格的值是: {cell_value}")# 4. 遍历所有行print("--- 遍历输出 ---")for row in ws.iter_rows(min_row=1, max_row=3, values_only=True): print(row)
4. 新手常犯的 5 个错误与解决方案
作为初学者,代码报错是常有的事。以下是读取 Excel 时最常见的 5 个“坑”及其解决方法。
🚫 错误 1:FileNotFoundError (找不到文件)
现象:报错 [Errno 2] No such file or directory: 'data.xlsx'原因:Python 找不到你的文件。通常是因为你只写了文件名,但文件不在代码运行的当前目录下。解决:
- 方法 A:将 Excel 文件移动到与 Python 脚本完全相同的文件夹中。
- Windows 用户注意:路径中的反斜杠
\ 在 Python 中是转义字符,建议在字符串前加 r 或者使用正斜杠 /。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 错误写法path = 'C:\Users\Name\Desktop\data.xlsx' # 正确写法 (推荐)path = r'C:\Users\Name\Desktop\data.xlsx' # 或者path = 'C:/Users/Name/Desktop/data.xlsx'
🚫 错误 2:ImportError: Missing optional dependency 'openpyxl'
现象:使用 Pandas 读取 .xlsx 文件时报错。原因:虽然安装了 Pandas,但没有安装解析 Excel 文件的引擎 openpyxl。解决:在终端运行 pip install openpyxl。
🚫 错误 3:PermissionError (权限错误)
现象:报错 Permission denied: 'sales_data.xlsx'原因:Excel 文件正在被另一个程序(通常是 Excel 软件本身)打开。Windows 系统会锁定打开的文件,禁止其他程序读取或写入。解决:关闭 Excel 软件,然后重新运行 Python 代码。
🚫 错误 4:读取到了 "Unnamed: 0" 列
现象:打印数据时,发现多了一列索引或者空列。原因:Excel 表格中存在隐藏的格式,或者表头上方有空行。解决:
- 如果第一行不是表头,使用
header=None 或 header=1(指定第二行为表头)。 - 如果不需要索引列,可以在输出时忽略,或者在读取时指定
index_col=0(将第一列作为索引)。
🚫 错误 5:数据变成了 NaN (Not a Number)
现象:Excel 里明明有数据,读取出来却是 NaN。原因:
- Excel 单元格里是公式(Pandas 默认读取公式结果,但有时需手动处理)。
- 合并单元格:Pandas 读取合并单元格时,只有左上角的单元格有值,其余会被填充为
NaN。解决:
- 处理合并单元格通常比较麻烦,建议在 Excel 端先取消合并填充数据,或者使用
ffill() 函数在 Python 中向前填充数据。
5. 总结与建议
恭喜你!你已经掌握了 Python 读取 Excel 的核心方法。让我们快速回顾一下:
- 做数据分析、统计、清洗 -> 首选 Pandas (
pd.read_excel). - 读写单元格格式、操作特定位置 -> 首选 Openpyxl.
- 核心步骤:安装库 -> 导入库 -> 读取文件 -> 处理数据。
- 避坑指南:注意文件路径、确保文件未被占用、安装好依赖库。
下一步学习建议: 学会读取只是第一步。接下来,你可以尝试学习如何筛选数据(例如:只看销售额大于 1000 的记录)以及如何将处理后的结果保存回 Excel 文件 (df.to_excel)。
资源推荐:
希望这篇教程能帮助你开启 Python 办公自动化的大门!如果有任何问题,欢迎动手尝试解决,编程就是在不断的 Debug 中学会的。