当前位置:首页 > Python > 正文

Openpyxl教程:Excel按行按列读取数据详解 - Python数据处理指南

Openpyxl教程:Excel按行按列读取数据详解

本教程将详细介绍如何使用Python的openpyxl库按行和按列读取Excel文件中的数据。无论您是数据分析师、开发者还是办公自动化工程师,掌握这些技巧都能大幅提升您处理Excel数据的效率。

一、为什么选择openpyxl处理Excel?

openpyxl是Python中最流行的Excel处理库之一,特别适合处理.xlsx格式的Excel文件。主要优势包括:

  • 无需安装Microsoft Excel即可操作Excel文件
  • 支持Excel 2010及更高版本
  • 同时支持读取和写入操作
  • 对大型文件处理效率较高
  • 丰富的单元格格式设置功能

二、安装openpyxl

使用pip命令安装openpyxl:

pip install openpyxl

三、基础操作:加载Excel文件

在开始读取数据前,需要先加载Excel文件:

from openpyxl import load_workbook

# 加载Excel文件
workbook = load_workbook(filename="示例数据.xlsx")

# 获取活动工作表
sheet = workbook.active

# 或者通过名称获取特定工作表
# sheet = workbook["销售数据"]

四、按行读取Excel数据

按行读取是最常用的数据读取方式,特别适合处理表格型数据:

1. 遍历所有行

for row in sheet.iter_rows(values_only=True):
    print(row)

2. 读取指定行范围

# 读取第2行到第10行
for row in sheet.iter_rows(min_row=2, max_row=10, values_only=True):
    print(row)

3. 读取行并获取单元格值

# 读取第一行
first_row = next(sheet.iter_rows(values_only=True))

# 访问特定单元格
print(f"第一行第一个单元格: {first_row[0]}")
print(f"第一行第三个单元格: {first_row[2]}")

五、按列读取Excel数据

按列读取在需要垂直分析数据时非常有用:

1. 遍历所有列

for column in sheet.iter_cols(values_only=True):
    print(column)

2. 读取指定列范围

# 读取A列到C列
for col in sheet.iter_cols(min_col=1, max_col=3, values_only=True):
    print(col)

3. 获取特定列的数据

# 获取B列所有数据(第2列)
b_column = [cell[0] for cell in sheet.iter_cols(min_col=2, max_col=2, values_only=True)]
print(b_column)

六、应用场景分析

按行读取适用场景

  • 处理表格形式的数据记录
  • 逐行处理订单、交易记录
  • 导入数据库记录
  • 处理CSV格式的平面数据

按列读取适用场景

  • 分析特定数据指标(如销售额列)
  • 提取特定类型的数据
  • 生成数据图表所需的数据系列
  • 处理时间序列数据

七、完整示例:读取销售数据

from openpyxl import load_workbook

def read_sales_data(file_path):
    # 加载工作簿
    wb = load_workbook(filename=file_path)
    sheet = wb.active
    
    # 读取表头
    headers = [cell.value for cell in next(sheet.iter_rows(min_row=1, max_row=1))]
    
    # 存储所有销售记录
    sales_records = []
    
    # 按行读取数据(从第二行开始)
    for row in sheet.iter_rows(min_row=2, values_only=True):
        record = dict(zip(headers, row))
        sales_records.append(record)
    
    # 按列读取产品销售额
    product_sales = {}
    product_col_index = headers.index("产品名称") + 1
    sales_col_index = headers.index("销售额") + 1
    
    # 遍历产品列和销售额列
    for product, sales in zip(
        sheet.iter_cols(min_col=product_col_index, max_col=product_col_index, 
                       min_row=2, values_only=True),
        sheet.iter_cols(min_col=sales_col_index, max_col=sales_col_index, 
                       min_row=2, values_only=True)
    ):
        for p, s in zip(product, sales):
            if p not in product_sales:
                product_sales[p] = 0
            product_sales[p] += s
    
    return sales_records, product_sales

# 使用示例
records, product_totals = read_sales_data("sales_data.xlsx")
print("总销售记录数:", len(records))
print("产品销售额统计:", product_totals)

八、性能优化技巧

  • 使用read_only=True模式打开大型文件:load_workbook(file, read_only=True)
  • 指定values_only=True参数只获取值,忽略格式信息
  • 精确指定读取范围(行和列的范围)减少内存占用
  • 处理完成后及时关闭工作簿:workbook.close()
  • 避免在循环中频繁访问同一单元格,可以先将数据加载到内存

九、总结

通过本教程,您已经掌握了使用openpyxl按行和按列读取Excel数据的方法。关键点总结:

  • 按行读取:使用iter_rows()方法,适合处理记录型数据
  • 按列读取:使用iter_cols()方法,适合分析特定数据指标
  • 参数使用:通过min_row/max_row和min_col/max_col精确控制读取范围
  • 性能优化:对于大型文件,使用只读模式和values_only参数

掌握这些技巧后,您可以高效地处理各种Excel数据分析任务,为数据清洗、分析和报告生成提供强大支持。

发表评论