Python读取Excel表格数据
在Python中,有几种常用的库可以读取Excel表格数据,主要包括pandas、openpyxl和xlrd等,下面我将介绍这些方法的使用。

使用pandas库(推荐)
pandas是Python数据分析的核心库,提供了强大的Excel读取功能。
安装pandas
pip install pandas openpyxl
基本用法
import pandas as pd
# 读取Excel文件
df = pd.read_excel('example.xlsx') # 默认读取第一个工作表
# 指定工作表
df = pd.read_excel('example.xlsx', sheet_name='Sheet2') # 按名称指定
df = pd.read_excel('example.xlsx', sheet_name=0) # 按索引指定
# 读取多个工作表
sheets = pd.read_excel('example.xlsx', sheet_name=['Sheet1', 'Sheet3'])
# 或者读取所有工作表
all_sheets = pd.read_excel('example.xlsx', sheet_name=None)
# 查看数据
print(df.head()) # 查看前5行
print(df.info()) # 查看数据信息
高级选项
# 指定列
df = pd.read_excel('example.xlsx', usecols=['A', 'C', 'E'])
# 指定行(跳过前几行)
df = pd.read_excel('example.xlsx', skiprows=2) # 跳过前2行
# 指定索引列
df = pd.read_excel('example.xlsx', index_col='ID')
# 指定列名
df = pd.read_excel('example.xlsx', names=['NewName1', 'NewName2'])
# 读取特定数据类型
df = pd.read_excel('example.xlsx', dtype={'Column1': str, 'Column2': float})
# 处理合并的单元格(需要openpyxl引擎)
df = pd.read_excel('example.xlsx', engine='openpyxl')
使用openpyxl库
openpyxl专门用于处理.xlsx格式的Excel文件,适合需要精细操作的情况。
安装
pip install openpyxl
基本用法
from openpyxl import load_workbook
# 加载工作簿
wb = load_workbook('example.xlsx')
# 获取工作表
sheet = wb.active # 获取活动工作表
sheet = wb['Sheet1'] # 按名称获取
# 读取单元格数据
cell_value = sheet['A1'].value # 读取A1单元格
cell_value = sheet.cell(row=1, column=1).value # 同上
# 读取整行或整列
row_data = sheet[1] # 第一行
col_data = sheet['A'] # A列
# 读取所有数据
data = []
for row in sheet.iter_rows(values_only=True):
data.append(row)
# 转换为pandas DataFrame
import pandas as pd
df = pd.DataFrame(data[1:], columns=data[0]) # 假设第一行是标题
使用xlrd库
xlrd主要用于读取.xls格式的旧版Excel文件,新版Excel(.xlsx)支持有限。
安装
pip install xlrd
基本用法
import xlrd
# 打开工作簿
wb = xlrd.open_workbook('example.xls')
# 获取工作表
sheet = wb.sheet_by_index(0) # 按索引
sheet = wb.sheet_by_name('Sheet1') # 按名称
# 读取单元格
cell_value = sheet.cell_value(0, 0) # 第1行第1列
# 读取整行或整列
row_data = sheet.row_values(0) # 第1行
col_data = sheet.col_values(0) # 第1列
# 获取总行数和列数
nrows = sheet.nrows
ncols = sheet.ncols
读取大型Excel文件的技巧
对于大型Excel文件,可以使用以下方法提高效率:

# 使用pandas的chunksize参数
chunk_size = 10000
chunks = pd.read_excel('large_file.xlsx', chunksize=chunk_size)
for chunk in chunks:
process(chunk) # 处理每个数据块
# 使用openpyxl的read_only模式
wb = load_workbook('large_file.xlsx', read_only=True)
sheet = wb.active
for row in sheet.iter_rows(values_only=True):
process(row) # 逐行处理
处理Excel中的日期
Excel中的日期在Python中可能需要特殊处理:
# pandas自动转换日期
df = pd.read_excel('example.xlsx', parse_dates=['DateColumn'])
# 手动转换
df['DateColumn'] = pd.to_datetime(df['DateColumn'])
处理合并的单元格
合并的单元格在读取时可能会有问题,可以使用以下方法:
# 使用openpyxl处理合并的单元格
from openpyxl.utils import range_boundaries
merged_cells = sheet.merged_cells.ranges # 获取所有合并区域
for merged_range in merged_cells:
min_col, min_row, max_col, max_row = range_boundaries(merged_range.coord)
# 获取合并区域的值
merged_value = sheet.cell_value(min_row, min_col)
# 将合并区域的值应用到所有单元格
for row in range(min_row, max_row + 1):
for col in range(min_col, max_col + 1):
sheet.cell(row=row, column=col).value = merged_value
- 对于大多数数据分析任务,推荐使用
pandas,因为它提供了最简洁和强大的功能。 - 如果需要精细操作Excel文件(如处理合并单元格、格式等),可以使用
openpyxl。 - 对于旧版.xls文件,可以使用
xlrd。 - 处理大型文件时,考虑使用分块读取或只读模式。
选择哪种方法取决于你的具体需求和Excel文件的特性。

