现在位置: 首页 > Pandas 教程 > 正文

Pandas pd.read_excel() 函数

Python math 模块 Pandas 常用函数


read_excel() 是 pandas 库中用于读取 Excel 文件的函数,支持读取 .xlsx.xls 格式的 Excel 文件。

Excel 是企业数据分析中最常用的文件格式,它支持多个工作表、丰富的单元格格式、公式等。read_excel() 能够读取 Excel 文件中的数据,并将其转换为 pandas 的 DataFrame 格式,方便后续的数据处理和分析。


基本语法与参数

语法格式

pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
                 usecols=None, dtype=None, skiprows=None, nrows=None,
                 na_values=None, ...)

参数说明

参数类型说明默认值
iostr, ExcelFile, path object, file-like objectExcel 文件路径或 ExcelFile 对象必填
sheet_namestr, int, list, None要读取的工作表名称或索引,None 读取所有工作表0
headerint, list of int用作列名的行号,0 表示第一行0
nameslist-like自定义列名列表None
index_colint, str用作行索引的列None
usecolsint, str, list只读取指定的列None
dtypedict指定列的数据类型None
skiprowslist-like, int跳过指定的行None
nrowsint只读取前 n 行None

返回值

  • 返回类型pd.DataFramedict of DataFrames
  • sheet_name 是单个工作表时,返回一个 DataFrame。
  • sheet_name 是 None 或包含多个工作表时,返回一个字典,键是工作表名,值是对应的 DataFrame。

实例

通过以下示例,全面掌握 read_excel() 的各种用法。

示例 1:读取本地 Excel 文件

首先创建并读取一个简单的 Excel 文件。

实例

import pandas as pd
import openpyxl  # 需要安装: pip install openpyxl

# 创建一个 DataFrame
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
    'salary': [8000, 12000, 15000, 7000]
}
df_original = pd.DataFrame(data)

# 将 DataFrame 写入 Excel 文件
# Excel 文件路径: employees.xlsx
df_original.to_excel('employees.xlsx', index=False, engine='openpyxl')

# 使用 read_excel 读取 Excel 文件
# io: 文件路径(必填)
df = pd.read_excel('employees.xlsx')

# 查看读取结果
print("读取的 DataFrame:")
print(df)
print("n数据类型:")
print(df.dtypes)

运行结果预期:

读取的 DataFrame:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42   Guangzhou   15000
3  Lucy   26   Shenzhen    7000

数据类型:
name      object
age        int64
city      object
salary    int64

代码解析:

  • pd.read_excel('employees.xlsx') 是最基本的用法,直接传入文件路径即可。
  • 默认情况下,读取第一个工作表(sheet_name=0),第一行作为列名。
  • 需要安装 openpyxl 库来支持 .xlsx 格式的读写。

示例 2:读取多个工作表

Excel 文件可以包含多个工作表,read_excel() 支持灵活读取指定工作表或全部工作表。

h2 class="example">实例
import pandas as pd

# 创建包含多个工作表的 Excel 文件
# 先创建两个 DataFrame
df_sales = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'quantity': [100, 200, 150, 80],
    'price': [50, 30, 40, 60]
})

df_inventory = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'stock': [500, 300, 400, 200],
    'warehouse': ['WH1', 'WH2', 'WH1', 'WH3']
})

# 写入多个工作表到一个 Excel 文件
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
    df_sales.to_excel(writer, sheet_name='Sales', index=False)
    df_inventory.to_excel(writer, sheet_name='Inventory', index=False)

# 示例 2a: 读取指定工作表(按名称)
df_sales_read = pd.read_excel('multi_sheet.xlsx', sheet_name='Sales')
print("读取 Sales 工作表:")
print(df_sales_read)
print()

# 示例 2b: 读取指定工作表(按索引)
df_inv_read = pd.read_excel('multi_sheet.xlsx', sheet_name=1)
print("读取第2个工作表 (索引为1):")
print(df_inv_read)
print()

# 示例 2c: 读取所有工作表(返回字典)
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("所有工作表名称:", list(all_sheets.keys()))
print("n遍历所有工作表:")
for sheet_name, df_sheet in all_sheets.items():
    print(f"n--- {sheet_name} ---")
    print(df_sheet)

运行结果预期:

读取 Sales 工作表:
  product  quantity  price
0       A       100     50
1       B       200     30
2       C       150     40
3       D        80     60

读取第2个工作表 (索引为1):
  product  stock warehouse
0       A    500       WH1
1       B    300       WA2
2       C    400       WH1
3       D    200       WH3

所有工作表名称: ['Sales', 'Inventory']

遍历所有工作表:
--- Sales ---
  product  quantity  price
...

--- Inventory ---
  product  stock warehouse
...

代码解析:

  • sheet_name 参数可以接受工作表名称(字符串)或索引(整数)。
  • 设置 sheet_name=None 会读取所有工作表,返回一个字典,键是工作表名,值是 DataFrame。
  • 使用 pd.ExcelWriter 可以方便地写入多个工作表。

示例 3:高级用法 - 自定义列和跳过行

在实际工作中,Excel 文件可能有复杂的格式,需要灵活处理。

实例

import pandas as pd

# 创建一个带有标题行和空行的 Excel 文件
# 前几行是元数据,实际数据从第4行开始
data_with_header = """公司员工数据
创建日期: 2024-01-01
部门: 技术部
---
name,age,city,salary
Tom,28,Beijing,8000
Jerry,35,Shanghai,12000
"""


# 先创建一个 CSV 然后转换为 Excel(模拟真实场景)
import io
df_temp = pd.read_csv(io.StringIO(data_with_header.split('---')[1]))
df_temp.to_excel('complex_format.xlsx', index=False, engine='openpyxl')

# 示例 3a: 跳过前几行,使用第N行作为列名
df_skip = pd.read_excel('complex_format.xlsx', header=3)
print("跳过前3行,使用第4行作为列名:")
print(df_skip)
print()

# 示例 3b: 只读取指定的列
df_cols = pd.read_excel('complex_format.xlsx', usecols=['name', 'salary'])
print("只读取 name 和 salary 列:")
print(df_cols)
print()

# 示例 3c: 只读取前几行
df_head = pd.read_excel('complex_format.xlsx', nrows=2)
print("只读取前2行:")
print(df_head)
print()

# 示例 3d: 自定义列名
df_custom_names = pd.read_excel('complex_format.xlsx',
                                  names=['姓名', '年龄', '城市', '薪资'],
                                  header=0)
print("自定义列名:")
print(df_custom_names)

运行结果预期:

跳过前3行,使用第4行作为列名:
    name  age     city  salary
0    Tom   28  Beijing    8000
1  Jerry   35  Shanghai  12000

只读取 name 和 salary 列:
    name  salary
0    Tom    8000
1  Jerry  12000

只读取前2行:
    name  age     city  salary
0    Tom   28  Beijing    8000

自定义列名:
     姓名  年龄       城市    薪资
0    Tom   28    Beijing   8000
1  Jerry   35   Shanghai  12000

代码解析:

  • header 参数指定使用第几行作为列名(从0开始计数)。
  • usecols 可以指定只读取哪些列,支持列名列表或列索引。
  • nrows 限制读取的行数,适合大文件的部分读取。
  • names 参数可以自定义列名,会覆盖原文件中的列名。

注意事项

  • 读取 .xlsx 格式需要安装 openpyxlpip install openpyxl
  • 读取 .xls 格式需要安装 xlrdpip install xlrd(注意:xlrd 2.0+ 版本不再支持 .xls 文件)。
  • Excel 文件有行数和列数限制(最多 1048576 行、16384 列),超出限制会导致数据丢失。
  • 读取大文件时,可以考虑使用 usecols 参数只读取需要的列,提高性能。
  • sheet_name 参数支持混合使用名称和索引。

小结

read_excel() 是 pandas 中读取 Excel 文件的核心函数,功能非常强大。它支持读取单个或多个工作表,可以灵活处理各种格式的 Excel 文件。

在实际数据分析工作中,Excel 文件是最常见的数据来源之一。熟练掌握 read_excel() 的各种参数用法,可以高效地处理各种 Excel 数据,为后续的数据清洗和分析做好准备。建议读者多加练习,特别是多工作表的读取和参数配置。

Python math 模块 Pandas 常用函数