Pandas Excel 数据导入教程:从文件到 DataFrame
Pandas 是 Python 中一个功能强大的数据分析库,它提供了 read_excel() 函数,可以方便地将 Excel 文件中的数据读取到 DataFrame 中。本教程将详细介绍如何使用 read_excel() 函数,从最基本的导入到处理各种常见场景。
1. 准备工作
在开始之前,请确保你的 Python 环境中已经安装了 Pandas 库。此外,为了能够读取 .xlsx 格式的 Excel 文件,你还需要安装 openpyxl。如果你的 Excel 文件是较旧的 .xls 格式,可能需要安装 xlrd(尽管 openpyxl 也能处理一些 .xls 文件)。
bash
pip install pandas openpyxl
2. 基本导入:读取第一个工作表
最简单的情况是,你希望读取 Excel 文件中的第一个工作表,并让 Pandas 自动识别列名(通常是第一行)。
“`python
import pandas as pd
假设你的 Excel 文件名为 ‘sample.xlsx’ 并且在当前目录下
df = pd.read_excel(‘sample.xlsx’)
打印 DataFrame 的前5行,以便快速查看数据
print(df.head())
“`
说明:
* pd.read_excel('sample.xlsx') 会默认读取指定 Excel 文件中的第一个工作表。
* Pandas 会尝试将 Excel 文件的第一行解析为 DataFrame 的列名(表头)。
3. 指定工作表:按名称或索引
如果你的 Excel 文件包含多个工作表,并且你需要读取特定的工作表,可以使用 sheet_name 参数。你可以通过工作表的名称或其基于 0 的索引来指定。
按工作表名称读取:
“`python
import pandas as pd
读取名为 ‘销售数据’ 的工作表
df_sales = pd.read_excel(‘sample.xlsx’, sheet_name=’销售数据’)
print(df_sales.head())
“`
按工作表索引读取 (索引从 0 开始):
“`python
import pandas as pd
读取 Excel 文件中的第二个工作表 (索引为 1)
df_second_sheet = pd.read_excel(‘sample.xlsx’, sheet_name=1)
print(df_second_sheet.head())
“`
4. 指定表头 (Header) 行
默认情况下,read_excel() 函数会把 Excel 文件的第一行(索引为 0)当作 DataFrame 的列名。如果你的实际表头位于其他行,可以通过 header 参数进行指定。
“`python
import pandas as pd
假设你的实际表头在 Excel 文件的第三行 (即索引为 2)
df_custom_header = pd.read_excel(‘sample.xlsx’, header=2)
print(df_custom_header.head())
“`
说明:
* header=2 表示将 Excel 文件的第 3 行(索引为 2)作为 DataFrame 的列名。
* 如果设置为 header=None,Pandas 将不会将任何行作为表头,而是自动生成从 0 开始的数字列名。
5. 指定索引列 (Index Column)
有时,你可能希望 Excel 文件中的某一列直接作为 DataFrame 的行索引。这可以通过 index_col 参数实现。
“`python
import pandas as pd
假设你想将 Excel 文件中的第一列 (索引为 0) 作为 DataFrame 的索引
df_indexed = pd.read_excel(‘sample.xlsx’, index_col=0)
print(df_indexed.head())
“`
说明:
* index_col=0 表示将 Excel 文件的第一列(索引为 0)设置为 DataFrame 的行索引。
* 你也可以直接指定列名,例如 index_col='ID',如果你的 Excel 文件中有名为 ‘ID’ 的列。
6. 处理缺失值
read_excel() 默认会将 Excel 文件中的空单元格读取为 NaN (Not a Number)。NaN 是 Pandas 中用来表示缺失值的标准方式。你可以通过 isnull() 或 notnull() 方法来检查缺失值,并使用 fillna()、dropna() 等方法进行处理。
7. 文件路径
你可以使用相对路径或绝对路径来指定 Excel 文件。
相对路径 (文件在当前工作目录或其子目录中):
“`python
假设文件在当前目录下的 ‘data’ 文件夹中
df = pd.read_excel(‘data/my_data.xlsx’)
“`
绝对路径 (指定文件的完整路径):
“`python
Windows 系统
df = pd.read_excel(‘C:\Users\YourUser\Documents\report.xlsx’)
推荐使用原始字符串 (r”) 避免反斜杠转义问题
df = pd.read_excel(r’C:\Users\YourUser\Documents\report.xlsx’)
macOS/Linux 系统
df = pd.read_excel(‘/Users/YourUser/Documents/report.xlsx’)
“`
8. 完整示例
为了更好地理解上述参数的应用,我们来看一个完整的示例。假设你有一个 data.xlsx 文件,其中包含两个工作表:基本信息 和 产品列表。
data.xlsx 内容示例:
工作表: 基本信息
| ID | 姓名 | 年龄 | 城市 |
|—-|——|—–|——|
| 1 | 张三 | 30 | 北京 |
| 2 | 李四 | 24 | 上海 |
| 3 | 王五 | 35 | 广州 |
工作表: 产品列表
| 产品名称 | 价格 | 数量 |
|———-|——|——|
| 苹果 | 1.0 | 100 |
| 香蕉 | 0.5 | 200 |
| 橙子 | 1.2 | 150 |
Python 代码:
“`python
import pandas as pd
import os
— 为了演示,我们先创建一个虚拟的 Excel 文件 —
在实际使用中,你会有自己的 Excel 文件
excel_file_name = ‘data.xlsx’
try:
with pd.ExcelWriter(excel_file_name) as writer:
df_info = pd.DataFrame({
‘ID’: [1, 2, 3],
‘姓名’: [‘张三’, ‘李四’, ‘王五’],
‘年龄’: [30, 24, 35],
‘城市’: [‘北京’, ‘上海’, ‘广州’]
})
df_info.to_excel(writer, sheet_name=’基本信息’, index=False)
df_products = pd.DataFrame({
'产品名称': ['苹果', '香蕉', '橙子'],
'价格': [1.0, 0.5, 1.2],
'数量': [100, 200, 150]
})
df_products.to_excel(writer, sheet_name='产品列表', index=False)
print(f"'{excel_file_name}' 文件已创建成功。")
except Exception as e:
print(f”创建 Excel 文件时出错: {e}”)
— 开始导入数据 —
print(“\n— 导入 ‘基本信息’ 工作表 (按名称) —“)
df_basic_info = pd.read_excel(excel_file_name, sheet_name=’基本信息’)
print(df_basic_info)
print(“\n— 导入 ‘产品列表’ 工作表 (按索引) —“)
‘产品列表’ 是第二个工作表,索引为 1
df_product_list = pd.read_excel(excel_file_name, sheet_name=1)
print(df_product_list)
print(“\n— 导入 ‘基本信息’ 工作表,并设置 ‘ID’ 列为索引 —“)
df_info_indexed = pd.read_excel(excel_file_name, sheet_name=’基本信息’, index_col=’ID’)
print(df_info_indexed)
清理创建的演示文件
if os.path.exists(excel_file_name):
os.remove(excel_file_name)
print(f”\n已删除演示文件: ‘{excel_file_name}'”)
“`
通过掌握 read_excel() 函数及其参数,你将能够灵活高效地从各种 Excel 文件中读取数据到 Pandas DataFrame,为后续的数据清洗、分析和可视化工作奠定坚实的基础。