杰瑞科技汇

Python如何用open解析Excel?

主流库对比

主要特点 适用场景 备注
pandas 数据分析和处理的行业标准,语法简洁,功能强大,能轻松读取数据并转换为 DataFrame。 数据清洗、数据分析、统计计算、数据可视化。 强烈推荐初学者和大多数用户使用,它本身依赖 openpyxlxlrd
openpyxl 功能全面的读写库,能读取、写入和修改 .xlsx 文件,并保留格式(如字体、颜色、图表等)。 需要精确控制 Excel 文件内容、样式、公式或进行复杂修改的场景。 功能强大,但代码比 pandas 稍显繁琐。
xlrd / xlwt xlrd 只能读旧版 .xls 文件,xlwt 只能写旧版 .xls 文件。 处理非常古老的 Excel 文件(.xls 格式)。 不推荐用于新项目.xls 格式已过时。xlrd 对新版 .xlsx 的支持有限。
pyxlsb 专门用于读取 Excel 二进制工作簿.xlsb)格式。 处理由 Excel 生成的、体积更小的 .xlsb 文件。 如果你需要处理这种特定格式,它是最佳选择。

使用 pandas (最推荐)

pandas 是数据科学领域的瑞士军刀,处理 Excel 数据最为便捷,它内部会调用 openpyxl(针对 .xlsx)或 xlrd(针对旧版 .xls)来完成实际操作。

Python如何用open解析Excel?-图1
(图片来源网络,侵删)

安装

pip install pandas openpyxl
# openpyxl 是处理 .xlsx 文件所必需的依赖

基本用法

示例 Excel 文件 (sales_data.xlsx)

假设我们有如下一个简单的 Excel 文件:

Product Sales_Region Q1_Sales Q2_Sales
Laptop East 50000 60000
Mouse West 20000 25000
Keyboard North 15000 18000
Monitor South 45000 48000

读取 Excel 文件

import pandas as pd
# --- 读取整个工作表 ---
# 默认读取第一个工作表
df = pd.read_excel('sales_data.xlsx')
print("默认读取第一个工作表:")
print(df)
print("\n")
# --- 读取指定工作表 ---
# Excel 文件可能有多个工作表 (Sheet1, Sheet2, ...)
df_sheet2 = pd.read_excel('sales_data.xlsx', sheet_name='Sheet2') # 假设有一个叫 Sheet2 的工作表
print("读取指定工作表 'Sheet2':")
print(df_sheet2)
print("\n")
# --- 读取多个工作表 ---
# 返回一个字典,键是工作表名,值是对应的 DataFrame
all_sheets = pd.read_excel('sales_data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
print("读取多个工作表,返回字典:")
print(all_sheets['Sheet1']) # 访问第一个工作表
print("\n")
# --- 读取所有工作表 ---
# sheet_name=None 会读取所有工作表
all_sheets = pd.read_excel('sales_data.xlsx', sheet_name=None)
print("读取所有工作表,返回字典:")
print(list(all_sheets.keys())) # 查看所有工作表名
print("\n")
# --- 指定索引列 ---
# 假设 'Product' 列更适合作为索引
df_indexed = pd.read_excel('sales_data.xlsx', index_col='Product')
print("指定 'Product' 为索引列:")
print(df_indexed)
print("\n")
# --- 指定列名 ---
# Excel 文件没有标题行,或者你想用新的列名
# header=None 表示文件没有标题行
# names 参数用于指定新的列名
df_no_header = pd.read_excel('sales_data.xlsx', header=None, names=['产品', '区域', '第一季度', '第二季度'])
print("指定新的列名:")
print(df_no_header)
print("\n")
# --- 只读取特定列 ---
df_specific_cols = pd.read_excel('sales_data.xlsx', usecols=['Product', 'Q1_Sales'])
print("只读取 'Product' 和 'Q1_Sales' 列:")
print(df_specific_cols)
print("\n")

写入 Excel 文件

# 创建一个新的 DataFrame
new_data = {
    'Product': ['Webcam', 'Microphone'],
    'Sales_Region': ['East', 'West'],
    'Q1_Sales': [8000, 12000],
    'Q2_Sales': [9500, 14000]
}
new_df = pd.DataFrame(new_data)
# 写入新的 Excel 文件
# index=False 表示不将 DataFrame 的索引写入 Excel
new_df.to_excel('new_sales_data.xlsx', index=False, sheet_name='New_Products')
print("已成功创建 new_sales_data.xlsx 文件")

使用 openpyxl

openpyxl 更底层,可以精确控制单元格的样式、公式、合并单元格等,但代码量会比 pandas 多。

安装

pip install openpyxl

基本用法

读取 Excel 文件

from openpyxl import load_workbook
# --- 加载工作簿 ---
# data_only=True 表示读取单元格的值(而不是公式)
# read_only=True 以只读模式打开,适合大文件,但不能修改
wb = load_workbook(filename='sales_data.xlsx', data_only=True)
# --- 获取工作表 ---
# 通过名称获取
sheet = wb['Sheet1']
# 或者通过索引获取 (从0开始)
# sheet = wb.worksheets[0]
# --- 读取单个单元格 ---
product_a = sheet['A1'].value
q1_sales_b2 = sheet['B2'].value
print(f"A1 单元格的值: {product_a}")
print(f"B2 单元格的值: {q1_sales_b2}")
print("-" * 20)
# --- 读取一行 ---
row_2_values = []
for cell in sheet[2]: # 第二行
    row_2_values.append(cell.value)
print(f"第二行的所有值: {row_2_values}")
print("-" * 20)
# --- 读取一列 ---
col_a_values = []
for row in sheet.iter_rows(min_col=1, max_col=1, values_only=True): # 第一列
    col_a_values.append(row[0])
print(f"第一列的所有值: {col_a_values}")
print("-" * 20)
# --- 遍历整个工作表 ---
print("遍历整个工作表:")
for row in sheet.iter_rows(values_only=True):
    print(row)
print("-" * 20)
# 关闭工作簿
wb.close()

写入和修改 Excel 文件

from openpyxl import Workbook
from openpyxl.styles import Font
# --- 创建一个新的工作簿 ---
wb_new = Workbook()
# --- 获取默认创建的工作表并重命名 ---
ws = wb_new.active= "Summary"
# --- 写入数据 ---
ws['A1'] = "Report Summary"
ws['A2'] = "Total Products"
ws['B2'] = 5
# --- 应用样式 ---
# 给 A1 单元格加粗
ws['A1'].font = Font(bold=True, size=14)
# --- 保存工作簿 ---
wb_new.save('summary_report.xlsx')
print("已成功创建 summary_report.xlsx 文件")

如何选择?

  • 如果你只想处理 Excel 中的数据(读取、分析、清洗、计算、再导出)

    • 首选 pandas,它更简单、更高效,代码更易读,这是 90% 情况下的最佳选择。
  • 如果你需要精确地操作 Excel 文件本身

    Python如何用open解析Excel?-图2
    (图片来源网络,侵删)
    • 修改单元格的颜色、字体、边框、合并单元格、插入图片、读取/写入公式、调整行高列宽等。
    • 使用 openpyxl,它提供了对 Excel 文件结构的底层控制。
  • 如果你处理的是旧版的 .xls 文件

    • 使用 xlrd (读) 和 xlwt (写),但请注意它们不再积极维护。
  • 如果你处理的是 .xlsb 文件

    • 使用 pyxlsb

对于初学者和绝大多数数据分析任务,pandas 开始是最好的选择,它能让你快速上手并完成核心的数据处理工作,当你发现需要对 Excel 文件的格式进行精细控制时,再深入学习和使用 openpyxl

Python如何用open解析Excel?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇