Python读取和处理Excel数据全攻略
立即解锁
发布时间: 2025-09-03 00:35:21 阅读量: 11 订阅数: 12 AIGC 


用Python和R增强Excel
### Python 读取和处理 Excel 数据全攻略
#### 1. 选择合适的 Python 库读取 Excel 文件
在 Python 中处理 Excel 文件时,选择合适的库至关重要。以下几个方面可以帮助你做出决策:
- **性能**:如果处理大型数据集或需要高效处理,像 pandas 这种拥有优化算法的库能带来显著的性能优势。
- **兼容性**:检查库与不同 Excel 文件格式和版本的兼容性,确保它支持你所使用的特定格式,避免出现兼容性问题。
- **学习曲线**:考虑每个库的学习曲线。例如,pandas 功能更丰富,但可能需要更多时间和精力来掌握。
| 库名 | 性能 | 兼容性 | 学习曲线 | 适用场景 |
| ---- | ---- | ---- | ---- | ---- |
| pandas | 高,适合大型数据集 | 支持常见格式 | 较复杂 | 数据操作和分析 |
| openpyxl | 适中 | 支持 .xlsx 和 .xlsm | 较简单 | 精细控制单元格和工作表 |
#### 2. 使用 pandas 读取 Excel 工作表
pandas 是一个强大的数据操作库,简化了处理结构化数据(包括 Excel 电子表格)的过程。以下是使用 pandas 读取 Excel 工作表的步骤:
```python
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('iris_data.xlsx', sheet_name='setosa')
# 显示 DataFrame 的前几行
print(df.head())
```
操作步骤说明:
1. 导入 pandas 库并将其重命名为 pd。
2. 使用 `read_excel` 函数读取指定 Excel 文件中的指定工作表。
3. 调用 `head()` 方法显示数据的前几行,以便快速预览。
#### 3. 使用 openpyxl 读取 Excel 工作表
openpyxl 是一个处理 Excel 文件的强大库,能对单个单元格和工作表进行更精细的控制。需要注意的是,openpyxl 不能处理 .xls 文件,仅支持较新的 .xlsx 和 .xlsm 版本。以下是使用 openpyxl 读取 Excel 工作表的步骤:
```python
import openpyxl
import pandas as pd
# 加载工作簿
wb = openpyxl.load_workbook('iris_data.xlsx')
# 选择工作表
sheet = wb['versicolor']
# 提取值(包括表头)
sheet_data_raw = sheet.values
# 将表头分离到一个变量中
header = next(sheet_data_raw)[0:]
# 根据第二行及后续数据创建 DataFrame,并使用表头作为列名
sheet_data = pd.DataFrame(sheet_data_raw, columns=header)
print(sheet_data.head())
```
操作步骤说明:
1. 导入 openpyxl 和 pandas 库。
2. 使用 `load_workbook` 函数加载 Excel 工作簿。
3. 通过工作表名称选择要操作的工作表。
4. 使用 `values` 属性提取工作表中的原始数据。
5. 将表头从数据中分离出来。
6. 使用 pandas 的 `DataFrame` 函数将数据转换为 DataFrame 格式,并使用表头作为列名。
7. 调用 `head()` 方法显示数据的前几行。
#### 4. 使用 Python 读取多个工作表(openpyxl 和自定义函数)
在许多 Excel 文件中,通常会有多个工作表包含不同的数据集。能够读取多个工作表并将数据合并到一个数据结构中,对于分析和处理非常有价值。以下是使用 openpyxl 库和自定义函数实现这一目标的步骤:
##### 4.1 读取多个工作表的重要性
当处理复杂的 Excel 文件时,相关数据可能分布在不同的工作表中。例如,一个工作表可能包含销售数据,另一个包含客户信息,还有一个包含产品库存。通过读取多个工作表并合并数据,可以获得全面的视图并进行综合分析。
##### 4.2 基本步骤
```mermaid
graph LR
A[加载工作簿] --> B[获取工作表名称]
B --> C[读取每个工作表的数据]
C --> D[存储数据]
```
1. **加载工作簿**:使用 openpyxl 提供的 `load_workbook` 函数加载 Excel 工作簿。
2. **获取工作表名称**:使用 `sheetnames` 属性获取工作簿中所有工作表的名称,以便确定要读取的工作表。
3. **读取每个工作表的数据**:通过迭代工作表名称,分别访问每个工作表并读取数据。openpyxl 提供了 `iter_rows` 或 `iter_cols` 等方法来遍历每个工作表的单元格并检索所需数据。
4. **存储数据**:为了合并多个工作表的数据,可以使用合适的数据结构,如 pandas DataFrame 或 Python 列表。根据数据的格式,可以选择直接拼接数据集或根据唯一标识符合并数据集。
##### 4.3 使用 openpyxl 访问工作表
openpyxl 是一个强大的库,允许我们使用 Python 与 Excel 文件进行交互。它具有以下优点:
- 能够处理各种 Excel 文件格式,如 .xlsx 和 .xlsm,避免了兼容性问题。
- 提供了简单直观的接口来访问工作表数据,便于检索所需信息。
##### 4.4 读取每个工作表的数据
以下是使用 `iter_rows` 和 `iter_cols` 方法读取工作表数据的示例:
```python
# 假设你正在处理第一个工作表
sheet = wb['versicolor']
# 迭代行并打印原始值
for row in sheet.iter_rows(min_row=1, max_row=5, values_only=True):
print(row)
# 迭代列并打印原始值
for column in sheet.iter_cols(min_col=1, max_col=5, values_only=True):
print(column)
```
操作步骤说明:
1. 选择要操作的工作表。
2. 使用 `iter_rows` 或 `iter_cols` 方法迭代行或列,并通过 `values_only=True` 参数指定只获取单元格的值。
3. 打印每行或每列的值。
##### 4.5 合并多个工作表的数据
在读取每个工作表的数据后,可以将其存储在列表或字典中,然后将所有数据合并到一个单一的合并数据结构中。以下是使用自定义函数实现这一目标的示例:
```python
from openpyxl import load_workbook
import pandas as pd
def read_single_sheet(workbook, sheet_name):
# 从工作簿中加载工作表
sheet = workbook[sheet_name]
# 读取包括表头的原始数据
sheet_data_raw = sheet.values
# 将表头分离到一个变量中
columns = next(sheet_data_raw)[0:]
# 根据第二行及后续数据创建 DataFrame,并使用表头作为列名
return pd.DataFrame(sheet_data_raw, columns=columns)
def read_multiple_sheets(file_path):
# 加载工作簿
workbook = load_workbook(file_path)
# 获取工作簿中所有工作表的名称
sheet_names = workbook.sheetnames
# 遍历工作表名称,加载每个工作表的数据并将其合并到一个 DataFrame 中
return pd.concat([read_single_sheet(workbook=workbook, sheet_name=sheet_name) for sheet_name in sheet_names], ignore_index=True)
# 定义文件路径
file_path = 'iris_data.xlsx' # 根据需要调整路径
# 读取多个工作表的数据
consolidated_data = read_multiple_sheets(file_path)
# 显示合并后的数据
print(consolidated_data.head())
```
操作步骤说明:
1. 定义 `read_single_sheet` 函数,用于读取单个工作表的数据并将其转换为 DataFrame。
2. 定义 `read_multiple_sheets` 函数,用于加载工作簿、获取所有工作表的名称、迭代每个工作表并调用 `read_single_sheet` 函数读取数据,最后使用 `pd.concat` 函数将所有数据合并到一个 DataFrame 中。
3. 指定 Excel 文件的路径。
4. 调用 `read_multiple_sheets` 函数读取多个工作表的数据。
5. 调用 `head()` 方法显示合并后数据的前几行。
##### 4.6 自定义代码
提供的示例代码可以根据具体需求进行定制,以下是一些定制代码的考虑因素:
- **过滤列**:如果只需要每个工作表中的特定列,可以在数据检索步骤中修改代码,只提取所需的列。可以使用 `iter_cols` 方法代替 `values` 属性,并在循环中使用过滤列表,或者过滤生成的 pandas DataFrame 对象。
- **处理缺失数据**:如果工作表中包含缺失数据,可以采用适当的处理技术,如填充缺失值或排除不完整的行。
- **应用转换**:根据数据的性质,可能需要对合并后的数据集应用转换或计算。可以扩展自定义函数以适应这些转换。
通过掌握在 Python 中打开 Excel 工作表并读取数据的技术,你将能够从 Excel 数据中提取有价值的信息,执行各种数据转换,并为进一步的分析或可视化做好准备。这些技能对于任何希望在数据驱动的工作流程中利用 Python 和 Excel 强大功能的人来说都是必不可少的。
### Python 读取和处理 Excel 数据全攻略
#### 5. 导出数据到 Excel 的好处
虽然在现代数据科学实践中,将数据从 R 和 Python 导出到 Excel 看似有些矛盾,但实际上有诸多好处:
- **利用 Excel 的数据处理和可视化能力**:Excel 提供了丰富的数据操作和可视化工具,如数据透视表、图表和条件格式等,这些工具能让用户更直观地探索和展示数据,有助于快速发现数据趋势,制作专业的报告和演示文稿。
- **便于与他人协作**:Excel 是一款广泛使用的电子表格程序,很多同事或利益相关者可能不熟悉 R 和 Python 或统计编程,将数据导出到 Excel 可以方便与他们共享数据,促进协作和知识交流。
- **借助 Excel 的插件和扩展功能**:Excel 拥有众多专业工具和插件,如 Power Query、Power Pivot 和 Solver 等,这些工具能提供数据清洗、高级计算和优化等额外功能,而这些功能在 R 和 Python 中可能不太容易使用或不够友好。将数据导出到 Excel 可以让用户利用这些工具,受益于更广泛的 Excel 生态系统。
#### 6. 总结
在处理 Excel 数据时,我们可以根据不同的需求选择合适的 Python 库:
| 需求 | 推荐库 | 原因 |
| ---- | ---- | ---- |
| 简化数据操作 | pandas | 具有 DataFrame 结构,便于数据操作和分析 |
| 精细控制单元格和工作表 | openpyxl | 能对单个单元格和工作表进行更细致的操作 |
| 读取多个工作表并合并数据 | openpyxl + pandas | openpyxl 用于读取,pandas 用于合并和处理数据 |
通过以下流程图可以清晰看到处理 Excel 数据的整体流程:
```mermaid
graph LR
A[选择合适的库] --> B[读取 Excel 文件]
B --> C{数据类型}
C -->|单个工作表| D[pandas 或 openpyxl 处理]
C -->|多个工作表| E[openpyxl 读取 + pandas 合并]
D --> F[数据操作和分析]
E --> F
F --> G[导出到 Excel]
```
操作步骤总结如下:
1. **选择合适的库**:根据性能、兼容性和学习曲线等因素,选择 pandas 或 openpyxl。
2. **读取 Excel 文件**:
- **单个工作表**:
- 使用 pandas:
```python
import pandas as pd
df = pd.read_excel('iris_data.xlsx', sheet_name='setosa')
print(df.head())
```
- 使用 openpyxl:
```python
import openpyxl
import pandas as pd
wb = openpyxl.load_workbook('iris_data.xlsx')
sheet = wb['versicolor']
sheet_data_raw = sheet.values
header = next(sheet_data_raw)[0:]
sheet_data = pd.DataFrame(sheet_data_raw, columns=header)
print(sheet_data.head())
```
- **多个工作表**:
```python
from openpyxl import load_workbook
import pandas as pd
def read_single_sheet(workbook, sheet_name):
sheet = workbook[sheet_name]
sheet_data_raw = sheet.values
columns = next(sheet_data_raw)[0:]
return pd.DataFrame(sheet_data_raw, columns=columns)
def read_multiple_sheets(file_path):
workbook = load_workbook(file_path)
sheet_names = workbook.sheetnames
return pd.concat([read_single_sheet(workbook=workbook, sheet_name=sheet_name) for sheet_name in sheet_names], ignore_index=True)
file_path = 'iris_data.xlsx'
consolidated_data = read_multiple_sheets(file_path)
print(consolidated_data.head())
```
3. **数据操作和分析**:根据具体需求对读取的数据进行处理,如过滤列、处理缺失数据、应用转换等。
4. **导出到 Excel**:将处理后的数据导出到 Excel 文件,以便利用 Excel 的优势进行进一步处理和展示。
通过掌握这些技能,我们可以充分发挥 Python 和 Excel 的优势,在数据驱动的工作流程中更高效地处理和分析数据。无论是从 Excel 中提取有价值的信息,还是将处理后的数据导出到 Excel 进行共享和展示,这些技能都将为我们的工作带来便利。
0
0
复制全文
相关推荐









