Python 深度挖掘:openpyxl 和 pandas 的使用详细教程

在处理 Excel 文件时,Python 的 openpyxl 和 pandas 是两个非常流行的库,它们各自有不同的优势。openpyxl更侧重于对 Excel 文件的精细控制,如格式设置、图表处理等,而 pandas 更侧重于数据处理和分析,尤其是大规模数据操作。

这篇教程将详细介绍如何使用这两个库来处理 Excel 文件。我们将学习如何用它们进行以下操作:

  1. 打开和读取 Excel 文件
  2. 数据操作:修改、插入、删除数据
  3. 处理多个工作表
  4. 格式设置
  5. 数据分析和导出
  6. 如何结合 openpyxl 和 pandas 使用

1. openpyxl 与 pandas 安装

首先,确保你安装了这两个库。你可以使用 pip 来安装它们:

pip install openpyxl pandas

2. 打开和读取 Excel 文件

使用 pandas 读取 Excel 文件

pandas 提供了非常便捷的方式来读取 Excel 文件。其 read_excel() 函数允许直接读取 Excel 文件,并返回一个 DataFrame

import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('example.xlsx')

# 显示前几行数据
print(df.head())

pandas 也支持从指定的工作表读取数据,可以使用 sheet_name 参数指定工作表名或索引。

# 读取指定工作表
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')

# 读取多个工作表
dfs = pd.read_excel('example.xlsx', sheet_name=['Sheet1', 'Sheet2'])

使用 openpyxl 读取 Excel 文件

openpyxl 允许你更细致地访问 Excel 文件中的内容,包括单元格的值、样式、公式等。

from openpyxl import load_workbook

# 加载 Excel 文件
wb = load_workbook('example.xlsx')

# 选择工作表
sheet = wb['Sheet1']

# 读取单元格内容
cell_value = sheet['A1'].value
print(cell_value)

# 读取一个单元格范围
for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):
    for cell in row:
        print(cell.value)

3. 数据操作:修改、插入、删除数据

使用 pandas 操作数据

pandas 提供了强大的数据操作功能,如修改、删除和插入数据。

修改数据
# 修改某个单元格的值
df.at[0, 'Column1'] = 'New Value'

# 修改整个列的数据
df['Column2'] = df['Column2'] * 2
删除数据
# 删除某一列
df = df.drop(columns=['Column1'])

# 删除某一行
df = df.drop(index=0)
插入数据
# 插入一列数据
df['NewColumn'] = df['Column2'] + df['Column3']

# 插入一行数据
new_row = {'Column1': 10, 'Column2': 20, 'Column3': 30}
df = df.append(new_row, ignore_index=True)

使用 openpyxl 操作数据

openpyxl 可以对单元格进行修改、插入新行或列等操作。

修改数据
# 修改单元格的值
sheet['A1'] = 'New Value'
插入数据
# 插入一行
sheet.insert_rows(2)

# 插入一列
sheet.insert_cols(2)

# 插入数据
sheet['B2'] = 'New Data'
删除数据
# 删除行
sheet.delete_rows(2)

# 删除列
sheet.delete_cols(2)

4. 处理多个工作表

使用 pandas 处理多个工作表

pandas 可以直接读取多个工作表,并将它们返回为一个字典,字典的键是工作表的名称,值是对应的 DataFrame

# 读取多个工作表
dfs = pd.read_excel('example.xlsx', sheet_name=None)

# 获取特定工作表的 DataFrame
df_sheet1 = dfs['Sheet1']
df_sheet2 = dfs['Sheet2']

使用 openpyxl 处理多个工作表

你可以通过 openpyxl 访问多个工作表,方法是通过 workbook.sheetnames 获取所有工作表的名称,然后选择不同的工作表。

# 获取所有工作表名称
sheet_names = wb.sheetnames
print(sheet_names)

# 访问工作表
sheet1 = wb['Sheet1']
sheet2 = wb['Sheet2']

5. 格式设置

使用 openpyxl 设置格式

openpyxl 允许你自定义单元格的格式,包括字体、颜色、边框等。

设置字体和颜色
from openpyxl.styles import Font, Color, PatternFill

# 设置字体
font = Font(name='Calibri', size=12, bold=True, color='FF0000')
sheet['A1'].font = font

# 设置背景颜色
fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
sheet['A1'].fill = fill
设置边框
from openpyxl.styles import Border, Side

# 创建边框样式
border = Border(left=Side(style='thin'), right=Side(style='thin'),
                top=Side(style='thin'), bottom=Side(style='thin'))

sheet['A1'].border = border

使用 pandas 设置格式

pandas 主要用于数据处理和分析,因此它对格式化的支持较弱。不过你可以通过 Styler 对 DataFrame 进行简单的样式设置,或者结合 openpyxl 来做更复杂的格式化。

# 使用 pandas 的 Styler 设置样式
styled_df = df.style.highlight_max(color='yellow').highlight_min(color='red')

# 将样式应用到 Excel 中
styled_df.to_excel('styled_example.xlsx', engine='openpyxl')

6. 数据分析与导出

使用 pandas 进行数据分析

pandas 提供了强大的数据分析工具,可以进行汇总、分组、聚合、筛选等操作。

数据汇总
# 获取数据的描述性统计
print(df.describe())

# 获取某一列的最大值和最小值
print(df['Column2'].max(), df['Column2'].min())
分组与聚合
# 按某列分组并计算聚合统计
grouped = df.groupby('Column1').agg({'Column2': 'sum'})
print(grouped)

导出数据到 Excel 文件

你可以使用 pandas 导出 DataFrame 到 Excel 文件,甚至可以同时导出多个工作表。

# 导出为 Excel 文件
df.to_excel('output.xlsx', index=False)

# 导出多个工作表
with pd.ExcelWriter('multiple_sheets.xlsx', engine='openpyxl') as writer:
    df_sheet1.to_excel(writer, sheet_name='Sheet1')
    df_sheet2.to_excel(writer, sheet_name='Sheet2')

7. 如何结合 openpyxl 和 pandas 使用

有时你需要在数据处理时同时使用 pandas 和 openpyxl,比如用 pandas 处理数据,然后用 openpyxl 设置格式。

例子:处理数据并设置格式

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font

# 使用 pandas 读取数据
df = pd.read_excel('example.xlsx')

# 修改数据
df['Column1'] = df['Column1'] * 2

# 使用 openpyxl 设置格式
wb = load_workbook('example.xlsx')
sheet = wb.active

# 设置字体
font = Font(name='Arial', size=14, bold=True)
sheet['A1'].font = font

# 将修改后的数据写回 Excel
df.to_excel('modified_example.xlsx', index=False, engine='openpyxl')

总结

  • openpyxl 是一个强大的库,适合做精细的 Excel 操作,如格式设置、插入图表等。
  • pandas 是用于数据分析和处理的库,提供了强大的数据操作功能,尤其适合大规模数据操作。
  • 结合使用这两个库可以让你更高效地处理和分析 Excel 数据。

这篇教程涵盖了如何使用这两个库来读取、操作、分析 Excel 数据,并进行格式设置。根据你的需求,选择合适

的库或者结合使用它们来提高你的工作效率。