Python 使用 Pandas 自动化处理 Excel 数据教程
Pandas 是 Python 数据分析的核心库,支持高效读取和写入 Excel 文件。本文介绍 DataFrame 数据结构、行列操作、单元格定位及数据筛选方法。通过实际代码示例,展示如何利用 Pandas 实现 Excel 自动化处理,替代繁琐的手工操作,提升数据处理效率。内容涵盖环境配置、基础 IO、条件过滤、行列运算及完整实战脚本,适合希望掌握 Python 办公自动化的用户参考。

Pandas 是 Python 数据分析的核心库,支持高效读取和写入 Excel 文件。本文介绍 DataFrame 数据结构、行列操作、单元格定位及数据筛选方法。通过实际代码示例,展示如何利用 Pandas 实现 Excel 自动化处理,替代繁琐的手工操作,提升数据处理效率。内容涵盖环境配置、基础 IO、条件过滤、行列运算及完整实战脚本,适合希望掌握 Python 办公自动化的用户参考。

在日常工作中,Excel 是数据处理最常用的工具之一。然而,面对繁杂的数据操作,手动处理往往效率低下且容易出错。Python 的 Pandas 库提供了强大的数据清洗和分析能力,能够轻松实现 Excel 操作的自动化,显著提升工作效率。
本文将详细介绍如何使用 Pandas 进行 Excel 数据的读取、写入、筛选及修改操作,通过实际代码示例帮助你快速上手。
在使用 Pandas 之前,需要安装必要的依赖库。Pandas 本身用于数据处理,而处理 .xlsx 格式文件通常需要 openpyxl 引擎。
pip install pandas openpyxl
如果遇到安装错误,建议先升级 pip 和 setuptools:
python -m pip install --upgrade pip setuptools
Pandas 的核心数据结构是 DataFrame(二维表格)和 Series(一维数组)。在 Excel 语境下,它们的对应关系如下:
| Pandas 对象 | Excel 对应概念 |
|---|---|
| DataFrame | Sheet 工作表 |
| Series | 列 (Column) |
| Index | 行号索引 |
| NaN | 空单元格 |
理解这一映射关系有助于将 Excel 思维转化为编程逻辑。
我们可以直接在代码中构建一个 DataFrame,模拟 Excel 中的数据。
import pandas as pd
# 创建一个包含两行两列的示例数据
data = {
'姓名': ['张三', '李四'],
'年龄': [25, 30]
}
df = pd.DataFrame(data)
print(df)
使用 read_excel 方法读取本地 Excel 文件。默认情况下,第一行被视为列名。
# 读取名为 data.xlsx 的文件
# header=0 表示从第 1 行开始作为列名,默认为 0
# index_col=0 表示将第 1 列作为索引
try:
df_read = pd.read_excel('data.xlsx')
print(df_read.head()) # 打印前 5 行
except FileNotFoundError:
print("未找到文件,请检查路径")
使用 to_excel 方法将 DataFrame 保存为 Excel 文件。
# 保存为 output.xlsx,index=False 表示不保存行索引
# engine='openpyxl' 指定使用 openpyxl 引擎处理 xlsx 格式
df.to_excel('output.xlsx', index=False, engine='openpyxl')
在实际场景中,我们通常不需要展示所有数据,或者需要根据条件筛选特定记录。
head(n): 显示前 n 行。tail(n): 显示后 n 行。sample(n): 随机抽取 n 行。# 只显示前 5 行
print(df.head(5))
# 只显示后 3 行
print(df.tail(3))
可以通过布尔索引筛选满足条件的行。例如,筛选年龄大于 28 岁的数据。
# 筛选年龄大于 28 的行
filtered_df = df[df['年龄'] > 28]
print(filtered_df)
如果 Excel 文件的表头不在第一行,可以使用 header 参数指定。
# 假设表头在第 5 行(索引为 4),则设置 header=4
df_custom = pd.read_excel('data.xlsx', header=4)
对某一列进行数学运算或字符串处理非常便捷。
# 将 '年龄' 列的所有值除以 2
df['年龄'] = df['年龄'] / 2
# 添加新列,计算年龄的两倍
df['双倍年龄'] = df['年龄'] * 2
对行进行操作通常涉及索引定位。可以使用 loc (标签) 或 iloc (位置)。
# 获取第 3 行的数据 (索引为 2)
row_3 = df.iloc[2]
# 给第 4 行的所有数值加 10 (假设该行为数值型)
# 注意:需确保该行存在且数据类型兼容
df.iloc[3] += 10
当需要对特定单元格进行修改时,Pandas 提供了多种访问器:
| 方法 | 说明 |
|---|---|
at | 通过行/列标签唯一定位单个单元格 (速度快) |
loc | 通过标签访问单元格或切片 |
iat | 通过整数位置访问单个单元格 (速度快) |
iloc | 通过整数位置访问切片 |
# 定位第 2 行第 2 列的单元格 (标签方式)
val_at = df.at[1, '年龄']
# 定位第 2 行第 2 列的单元格 (位置方式,索引从 0 开始)
val_iat = df.iat[1, 1]
# 修改单元格值
df.at[1, '年龄'] = 99
以下是一个完整的脚本示例,演示如何读取 Excel、处理数据并保存结果。
import pandas as pd
import os
def process_excel(input_path, output_path):
"""
读取 Excel,筛选有效数据,处理数值,并保存
"""
if not os.path.exists(input_path):
print(f"文件 {input_path} 不存在")
return
try:
# 1. 读取数据
df = pd.read_excel(input_path)
print(f"原始数据行数:{len(df)}")
# 2. 数据清洗:删除全空行
df.dropna(how='all', inplace=True)
# 3. 数据处理:假设有一列 '分数',计算平均分
if '分数' in df.columns:
df['状态'] = df['分数'].apply(lambda x: '及格' if x >= 60 else '不及格')
# 4. 筛选:只保留及格人员
valid_df = df[df['状态'] == '及格']
# 5. 保存结果
valid_df.to_excel(output_path, index=False, engine='openpyxl')
print(f"处理完成,已保存至 {output_path}")
except Exception as e:
print(f"发生错误:{e}")
# 调用函数
# process_excel('source.xlsx', 'result.xlsx')
Pandas 不仅支持基础的读写操作,还涵盖了排序、查找替换、透视表等高级功能,其灵活性和性能远超传统 Excel 公式。对于重复性高、数据量大的任务,使用 Pandas 编写脚本是最佳选择。
建议开发者在实际项目中结合 openpyxl 或 xlsxwriter 进一步美化输出格式,以满足更复杂的业务需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online