Pandas 读取 Excel 入门指南 – wiki基地


Pandas 读取 Excel 入门指南:从零开始到精通数据加载

Excel 文件因其直观性和易用性,在全球范围内被广泛用于数据存储和共享。然而,当数据量庞大、需要进行复杂的自动化处理、分析或与其他数据源集成时,手动操作或简单的 Excel 公式就显得力不从心了。这时,强大的 Python 数据分析库 Pandas 便成为了处理 Excel 数据的首选工具。

Pandas 提供了一个名为 read_excel() 的函数,它可以轻松、灵活地将 Excel 文件(包括 .xlsx.xls 格式)中的数据加载到 Python 的核心数据结构——DataFrame 中。一旦数据被加载到 DataFrame,我们就可以利用 Pandas 丰富的函数集进行清洗、转换、分析和可视化。

本文将带你一步步深入了解如何使用 Pandas 的 read_excel() 函数,从最基础的用法开始,逐步探索其各种强大参数,帮助你高效地读取和处理 Excel 数据。无论你是数据科学新手还是有一定编程基础,这篇指南都将为你提供清晰、详细的指导。

1. 准备工作:安装必要的库

在使用 Pandas 读取 Excel 文件之前,你需要确保你的 Python 环境已经安装了 Pandas 以及用于处理 Excel 文件的引擎库。

首先,安装 Pandas:

bash
pip install pandas

接下来,根据你使用的 Excel 文件格式(主要是 .xlsx.xls),你可能需要安装相应的引擎库。

  • 对于较新的 .xlsx 格式文件(自 Excel 2007 起),通常使用 openpyxl 作为引擎。
  • 对于较旧的 .xls 格式文件,通常使用 xlrd 作为引擎。

推荐同时安装这两个库,以确保能够处理各种格式的 Excel 文件:

bash
pip install openpyxl xlrd

安装完成后,你就可以在 Python 脚本或 Jupyter Notebook 中导入 Pandas 并开始使用了:

python
import pandas as pd

习惯上,我们将 Pandas 导入并命名为 pd,这是一个广泛接受的约定。

2. 最基础的读取:加载第一个工作表

最简单的情况是,你的 Excel 文件只有一个工作表,并且数据从第一个单元格 (A1) 开始,第一行是列标题。在这种情况下,使用 read_excel() 函数非常直观。

假设你有一个名为 sales_data.xlsx 的文件,其中包含销售数据,并且数据在第一个工作表(通常名为 Sheet1 或类似名称)中。

“`python

假设 sales_data.xlsx 文件与你的 Python 脚本在同一个目录下

excel_file_path = ‘sales_data.xlsx’

try:
df = pd.read_excel(excel_file_path)

# 显示数据的前5行
print("成功读取文件,前5行数据:")
print(df.head())

# 显示数据框的基本信息(列名、非空值数量、数据类型)
print("\n数据框信息:")
df.info()

except FileNotFoundError:
print(f”错误:文件未找到,请检查文件路径: {excel_file_path}”)
except Exception as e:
print(f”读取文件时发生错误: {e}”)
“`

解释:

  • pd.read_excel(excel_file_path): 这是最核心的调用。你只需要提供 Excel 文件的路径作为第一个参数。
  • df: read_excel() 函数返回一个 Pandas DataFrame 对象,我们将其赋值给变量 df。DataFrame 是 Pandas 中用于存储二维表格数据(类似于电子表格或 SQL 表)的核心数据结构。
  • df.head(): 这是一个非常有用的方法,用于快速查看 DataFrame 的前几行(默认为前5行),帮助你确认数据是否正确加载。
  • df.info(): 这个方法提供了 DataFrame 的概要信息,包括索引类型、列的数量、每个列的名称、非空值的数量以及列的数据类型(dtype)。这对于初步了解数据结构和是否存在缺失值非常重要。

在最简单的调用中,read_excel() 会自动完成以下事情:

  1. 打开指定的 Excel 文件。
  2. 读取文件中的第一个工作表
  3. 将工作表的第一行视为列标题(如果这一行看起来像标题)。
  4. 将剩余的数据读取为 DataFrame 的数据行
  5. 自动为 DataFrame 生成一个默认的整数索引(从0开始)。

这对于许多简单的 Excel 文件已经足够了。但现实世界中的 Excel 文件往往更加复杂,可能包含多个工作表、非标准格式的标题、合并单元格、额外的信息行等。这时,我们就需要借助 read_excel() 的各种参数来精确控制数据的读取过程。

3. read_excel() 的重要参数详解

read_excel() 函数提供了许多参数,允许你精细地控制数据的读取行为。下面我们将详细介绍一些最常用和最重要的参数。

3.1 指定工作表 (sheet_name)

Excel 文件可以包含多个工作表。sheet_name 参数用于指定要读取哪一个或哪几个工作表。

  • 默认值: 0 (读取第一个工作表,索引从 0 开始)
  • 可用值:
    • 整数索引 (例如:0, 1, 2, …):按照工作表在文件中的顺序指定。
    • 工作表名称字符串 (例如:'Sheet1', 'Sales Data'):使用工作表的实际名称指定。
    • 整数索引列表或工作表名称列表 (例如:[0, 1], ['Sheet1', 'Summary']):读取多个指定的工作表。
    • None:读取所有工作表。

示例:

假设 sales_data.xlsx 文件中有三个工作表:Sheet1, Summary, Notes

读取第二个工作表 (索引 1):

“`python

读取索引为 1 的工作表 (即第二个工作表)

df_sheet2_by_index = pd.read_excel(excel_file_path, sheet_name=1)
print(“\n读取索引为 1 的工作表:”)
print(df_sheet2_by_index.head())
“`

读取名为 ‘Summary’ 的工作表:

“`python

读取名为 ‘Summary’ 的工作表

df_summary = pd.read_excel(excel_file_path, sheet_name=’Summary’)
print(“\n读取名为 ‘Summary’ 的工作表:”)
print(df_summary.head())
“`

读取多个指定工作表:

当你指定读取多个工作表时,read_excel() 返回的不再是一个 DataFrame,而是一个字典。字典的键是工作表的名称,值是对应工作表读取到的 DataFrame。

“`python

读取 ‘Sheet1’ 和 ‘Summary’ 这两个工作表

sheets_dict = pd.read_excel(excel_file_path, sheet_name=[‘Sheet1’, ‘Summary’])

print(“\n读取多个指定工作表(返回字典):”)

遍历字典,打印每个工作表的数据框头部

for sheet_name, df in sheets_dict.items():
print(f”\n工作表: {sheet_name}”)
print(df.head())
“`

读取所有工作表:

sheet_name=None 时,read_excel() 会读取文件中的所有工作表,同样返回一个字典,键是工作表名称,值是对应的 DataFrame。

“`python

读取所有工作表

all_sheets_dict = pd.read_excel(excel_file_path, sheet_name=None)

print(“\n读取所有工作表(返回字典):”)
for sheet_name, df in all_sheets_dict.items():
print(f”\n工作表: {sheet_name}”)
print(df.head())
“`

通过 sheet_name 参数,你可以轻松地从包含多个工作表的复杂 Excel 文件中提取你需要的数据。

3.2 指定标题行 (header)

header 参数用于指定哪一行应该被用作 DataFrame 的列标题。

  • 默认值: 0 (将第一行用作标题,索引从 0 开始)
  • 可用值:
    • 整数索引:指定作为标题的行的索引。
    • 整数索引列表 (例如:[0, 1]):用于创建多级(MultiIndex)列标题。
    • None:表示文件没有标题行,Pandas 会自动生成默认的整数列名(0, 1, 2, …)。

示例:

假设你的 Excel 文件第一行有一些备注信息,而实际的数据标题从第二行开始(索引为 1)。

“`python

读取文件,指定第二行 (索引 1) 作为标题

df_with_header = pd.read_excel(excel_file_path, header=1)
print(“\n指定第二行作为标题:”)
print(df_with_header.head())
“`

文件没有标题行:

如果你的 Excel 文件不包含标题行,你希望将第一行数据作为第一行数据,而不是标题。

“`python

读取文件,指定没有标题行

df_no_header = pd.read_excel(excel_file_path, header=None)
print(“\n文件没有标题行:”)
print(df_no_header.head())
print(“\n自动生成的列名:”)
print(df_no_header.columns) # 查看自动生成的列名
“`

多级标题:

如果你的 Excel 文件有两行甚至多行共同构成了列标题,你可以使用列表来指定这些行。Pandas 会创建一个 MultiIndex 作为列索引。

假设你的 Excel 前两行如下:
| | Region | Sales | Marketing |
|——-|——–|——-|———–|
| Product | North | Amount | Expense |

你需要将索引为 0 和 1 的行都作为标题。

“`python

读取文件,指定第1行和第2行 (索引 0 和 1) 作为多级标题

df_multi_header = pd.read_excel(excel_file_path, header=[0, 1])
print(“\n读取多级标题:”)
print(df_multi_header.head())
print(“\n多级列名:”)
print(df_multi_header.columns) # 查看多级列索引
“`

3.3 指定索引列 (index_col)

index_col 参数用于指定哪一列或哪几列应该被用作 DataFrame 的行索引(Index)。默认情况下,Pandas 会生成一个从 0 开始的整数索引。使用数据中的某一列或多列作为索引,通常是因为这些列具有唯一标识性,方便后续基于索引的数据查找和对齐。

  • 默认值: None (使用默认的整数索引)
  • 可用值:
    • 整数索引 (例如:0, 1):指定作为索引的列的索引。
    • 列名称字符串 (例如:'ID', 'Date'):使用列名称指定。
    • 整数索引列表或列名称列表 (例如:[0, 1], ['ID', 'Date']):用于创建多级(MultiIndex)行索引。
    • False:明确表示不使用任何列作为索引,即使第一列可能看起来像索引。

示例:

假设你的销售数据中有一列名为 ‘Order ID’,并且每个订单 ID 都是唯一的,你想把它作为行索引。

“`python

读取文件,使用 ‘Order ID’ 列作为索引

df_with_index = pd.read_excel(excel_file_path, index_col=’Order ID’)
print(“\n指定 ‘Order ID’ 列作为索引:”)
print(df_with_index.head())
print(“\n索引名称:”)
print(df_with_index.index.name)
“`

使用多列作为索引:

如果你想使用 ‘Region’ 和 ‘Product’ 两列的组合作为多级索引。

“`python

读取文件,使用 ‘Region’ 和 ‘Product’ 列作为多级索引

df_multi_index = pd.read_excel(excel_file_path, index_col=[‘Region’, ‘Product’])
print(“\n使用多列作为多级索引:”)
print(df_multi_index.head())
print(“\n多级索引名称:”)
print(df_multi_index.index.names)
“`

3.4 选择需要的列 (usecols)

usecols 参数允许你仅读取 Excel 文件中的部分列,而不是加载所有列。这在处理包含大量列但你只需要其中一部分的大文件时非常有用,可以节省内存和提高读取速度。

  • 默认值: None (读取所有列)
  • 可用值:
    • 字符串列表 (例如:['Name', 'Sales']):指定要读取的列的名称列表。
    • 整数索引列表 (例如:[0, 3, 4]):指定要读取的列的索引列表。
    • 字符串:用逗号分隔的 Excel 列字母 (例如:'A,C,D') 或范围 (例如:'A:C,E:G')。
    • 一个 callable 函数:接受列的 Excel 字母、名称和索引作为输入,返回布尔值判断是否包含该列。

示例:

假设你只需要销售数据中的 ‘Order ID’, ‘Product’, ‘Quantity’ 这三列。

使用列名称列表:

“`python

只读取指定的列

df_selected_cols_by_name = pd.read_excel(excel_file_path, usecols=[‘Order ID’, ‘Product’, ‘Quantity’])
print(“\n只读取指定的列 (按名称):”)
print(df_selected_cols_by_name.head())
print(“\n读取到的列名:”)
print(df_selected_cols_by_name.columns)
“`

使用列索引列表:

假设这三列分别是第 0, 1, 3 列。

“`python

只读取指定的列 (按索引)

df_selected_cols_by_index = pd.read_excel(excel_file_path, usecols=[0, 1, 3])
print(“\n只读取指定的列 (按索引):”)
print(df_selected_cols_by_index.head())
print(“\n读取到的列名:”)
print(df_selected_cols_by_index.columns)
“`

使用 Excel 列字母字符串:

假设这三列是 A, B, D 列。

“`python

只读取指定的列 (按 Excel 列字母)

注意:这种方式通常需要指定 header=None 或 header=0 才能正确映射

df_selected_cols_by_letter = pd.read_excel(excel_file_path, usecols=’A,B,D’)
print(“\n只读取指定的列 (按 Excel 列字母):”)
print(df_selected_cols_by_letter.head())
print(“\n读取到的列名:”)
print(df_selected_cols_by_letter.columns)
“`

3.5 指定列的数据类型 (dtype)

Pandas 会尝试自动推断每列的数据类型(例如,整数、浮点数、字符串、日期)。但有时,这种自动推断可能不准确,或者你希望强制某些列具有特定的数据类型(例如,将看起来像数字的列读取为字符串,以保留前导零)。dtype 参数允许你为列指定数据类型。

  • 默认值: None (自动推断数据类型)
  • 可用值:
    • 数据类型对象或名称字符串 (例如:int, float, str, bool, 'datetime64[ns]')。
    • 字典:将列名称映射到所需的数据类型 (例如:{'ColumnA': 'int64', 'ColumnB': 'str'})。

示例:

假设你的 ‘Order ID’ 列包含看起来像数字的值,但你希望它们被读取为字符串以保留可能的格式(如前导零 ‘001’)。假设 ‘Quantity’ 列应该总是整数。

“`python

指定 ‘Order ID’ 列为字符串,’Quantity’ 列为整数

dtype_mapping = {‘Order ID’: str, ‘Quantity’: int}
df_with_dtype = pd.read_excel(excel_file_path, dtype=dtype_mapping)
print(“\n指定列的数据类型:”)
print(df_with_dtype.head())
print(“\n指定数据类型后的数据框信息:”)
df_with_dtype.info()
“`

显式指定数据类型是一个很好的习惯,特别是对于大型数据集或数据类型推断容易出错的情况。

3.6 处理缺失值 (na_values)

Excel 文件中的空单元格在 Pandas 中默认会被读取为 NaN(Not a Number),这是 Pandas 表示缺失值的方式。然而,有时缺失值可能被表示为特定的字符串,例如 ‘N/A’, ‘Missing’, ‘-‘ 等。na_values 参数允许你指定哪些字符串应该被识别为缺失值并转换为 NaN

  • 默认值: Pandas 默认会识别一些常见的表示缺失值的字符串。
  • 可用值:
    • 单个字符串 (例如:'N/A')。
    • 字符串列表 (例如:['N/A', 'Missing', '-'])。
    • 字典:将列名称映射到该列特有的缺失值字符串或列表 (例如:{'ColumnA': 'N/A', 'ColumnB': ['Missing', 'None']})。

示例:

假设你的 Excel 文件中,缺失的销售额被标记为 ‘N/A’,缺失的备注被标记为 ‘—’。

“`python

将 ‘N/A’ 和 ‘—’ 识别为缺失值

na_strings = [‘N/A’, ‘—’]
df_with_na = pd.read_excel(excel_file_path, na_values=na_strings)
print(“\n指定额外的缺失值表示:”)
print(df_with_na.head())
print(“\n指定缺失值后的数据框信息:”)
df_with_na.info() # 查看非空值数量的变化
“`

使用 na_values 可以帮助你更准确地将 Excel 中的各种缺失表示统一为 NaN,方便后续的缺失值处理。

3.7 跳过行 (skiprows)

有时,Excel 文件的顶部可能包含一些不属于数据表格的额外信息(如报告标题、生成日期等)。skiprows 参数允许你在读取数据时跳过这些行。

  • 默认值: None (不跳过任何行)
  • 可用值:
    • 整数:跳过文件开头的指定行数。
    • 列表或集合:指定要跳过的具体行号(从 0 开始计数)。

示例:

假设你的 Excel 文件前 3 行是文件描述信息,数据从第 4 行开始。

“`python

跳过文件开头的 3 行

df_skip_rows = pd.read_excel(excel_file_path, skiprows=3)
print(“\n跳过文件开头的 3 行:”)
print(df_skip_rows.head())
“`

跳过特定行号:

假设你想跳过文件中的第 0 行、第 2 行和第 5 行。

“`python

跳过指定的行号

df_skip_specific_rows = pd.read_excel(excel_file_path, skiprows=[0, 2, 5])
print(“\n跳过指定的行号:”)
print(df_skip_specific_rows.head())
“`

3.8 只读取部分行 (nrows)

对于非常大的 Excel 文件,你可能只想读取文件的前几行进行快速检查或测试。nrows 参数允许你指定要读取的最大行数(不包括标题行)。

  • 默认值: None (读取所有数据行)
  • 可用值:
    • 整数:指定要读取的数据行数。

示例:

只读取销售数据的前 100 行。

“`python

只读取数据的前 100 行

df_nrows = pd.read_excel(excel_file_path, nrows=100)
print(“\n只读取数据的前 100 行:”)
print(df_nrows.head())
print(f”\n实际读取到的行数: {len(df_nrows)}”)
“`

结合 skiprowsnrows,你可以灵活地从 Excel 文件中读取特定范围的数据。

3.9 解析日期列 (parse_dates)

如果你的 Excel 文件包含日期或时间数据,并且你希望 Pandas 将它们正确地识别为日期时间类型(datetime64[ns]),而不是字符串或数字,可以使用 parse_dates 参数。

  • 默认值: False (不尝试解析日期)
  • 可用值:
    • 布尔值 True: 尝试解析索引。如果 index_col 指定了列,并且该列看起来像日期,则尝试解析。
    • 整数索引列表或列名称列表 (例如:[0, 1], ['Date', 'Timestamp']):指定要解析为日期时间的列。
    • 列表的列表 (例如:[[1, 2], [3, 4]]): 将指定的列组合起来解析为一个日期时间列。

示例:

假设你的销售数据中有一列名为 ‘Order Date’,包含了日期信息。

“`python

将 ‘Order Date’ 列解析为日期时间类型

df_parse_dates = pd.read_excel(excel_file_path, parse_dates=[‘Order Date’])
print(“\n将 ‘Order Date’ 列解析为日期时间:”)
print(df_parse_dates.head())
print(“\n解析日期后的数据框信息:”)
df_parse_dates.info() # 查看 ‘Order Date’ 列的数据类型是否变为 datetime64[ns]
“`

正确解析日期时间数据对于后续的时间序列分析、按日期过滤或聚合数据至关重要。

3.10 使用自定义函数转换数据 (converters)

converters 参数允许你在读取数据的同时,对某些列应用自定义的转换函数。这在你需要对特定列进行清洗或格式化时非常有用,例如移除字符串中的特定字符、转换单位等。

  • 默认值: None (不应用转换)
  • 可用值:
    • 字典:将列名称映射到应用于该列中每个值的函数 (例如:{'Price': lambda x: x * 100, 'Product': lambda x: x.lower()})。

示例:

假设 ‘Product’ 列包含产品名称,你希望将所有产品名称转换为小写。

“`python

使用 converter 将 ‘Product’ 列转换为小写

df_converters = pd.read_excel(excel_file_path, converters={‘Product’: lambda x: x.lower()})
print(“\n使用 converter 将 ‘Product’ 列转换为小写:”)
print(df_converters.head())
“`

请注意,converters 函数接收的是单元格的原始值,你需要确保你的函数能够处理可能的数据类型(如空值)。

3.11 指定引擎 (engine)

如前所述,Pandas 使用不同的后端引擎来读取不同格式的 Excel 文件。engine 参数允许你显式指定要使用的引擎。

  • 默认值: Pandas 会根据文件扩展名和已安装的库自动选择合适的引擎。
  • 可用值: 'xlrd', 'openpyxl', 'odfpy'

示例:

虽然通常不需要手动指定,但在某些特定情况下(例如,强制使用某个引擎排查问题),可以使用此参数。

“`python

显式指定使用 openpyxl 引擎

try:
df_engine = pd.read_excel(excel_file_path, engine=’openpyxl’)
print(“\n显式指定使用 openpyxl 引擎读取:”)
print(df_engine.head())
except ImportError:
print(“错误:未安装 openpyxl 库,无法使用该引擎。”)
“`

4. 处理常见的读取问题

在使用 read_excel() 时,可能会遇到一些常见问题。了解这些问题及其解决方案有助于你更顺畅地处理 Excel 数据。

  • FileNotFoundError: 文件路径错误或文件不存在。请仔细检查文件路径是否正确,包括文件扩展名,并确保文件位于指定的位置。可以使用绝对路径来避免相对路径的混淆。
  • ImportError: 缺少必要的 Excel 引擎库(openpyxlxlrd)。根据文件格式安装相应的库 (pip install openpyxl xlrd)。
  • 数据类型错误 (dtype issues): Pandas 推断的数据类型不正确,或者列中混杂了不同类型的数据。使用 dtype 参数显式指定列的数据类型。对于混合类型的数据,可以先读取为字符串 (dtype='str'),然后使用 Pandas 的类型转换函数 (pd.to_numeric, pd.to_datetime, astype) 进行更精细的转换和错误处理。
  • 标题行识别错误: 第一行不是标题,或者标题不在第一行。使用 header 参数指定正确的标题行。如果文件没有标题,使用 header=None
  • 缺失值识别不全: 某些表示缺失的字符串未被识别为 NaN。使用 na_values 参数添加自定义的缺失值字符串。
  • 跳过了不该跳的行或未跳过应跳过的行: 检查 skiprows 参数是否正确指定了要跳过的行数或行号。
  • 读取速度慢或内存占用高: 对于非常大的文件,考虑使用 usecols 只读取必需的列,或者使用 nrows 只读取部分数据进行初步分析。对于超大型文件(虽然 read_excel 没有 read_csvchunksize 参数直接支持分块读取,但你可以结合 skiprows 和循环来模拟分块读取),或者考虑将 Excel 转换为 CSV 格式再用 Pandas 读取,CSV 的读取效率通常更高且支持分块。
  • 合并单元格: Pandas 读取 Excel 时通常会忽略合并单元格的特殊显示效果,只读取左上角的单元格内容,其他合并的单元格会被读取为 NaN。如果合并单元格的数据结构对你的分析很重要,你可能需要在读取后进行额外的数据填充(例如使用 fillnamethod='ffill'method='bfill')。请注意,处理合并单元格可能比较复杂,取决于合并的方式和你的分析需求。
  • 读取特定区域的数据: 虽然 read_excel 没有直接的参数指定读取某个矩形区域(如 Excel 的 A1:C10),但你可以通过结合 header, usecols, skiprows, nrows 来达到类似的效果。例如,要读取 B2:D10 的数据,你可以设置 header=1 (如果标题在第 2 行),skiprows=1 (跳过第 1 行),usecols=['B', 'C', 'D'] 或对应的列索引,nrows=9 (从第 2 行开始,共 9 行)。这需要你对 Excel 文件的结构和 Pandas 参数的相互作用有深入理解。

5. 读取后的基本数据操作

成功将 Excel 数据加载到 DataFrame 后,你可以开始利用 Pandas 的强大功能进行数据处理。这里只列举几个最基本的操作,让你感受一下后续的可能性:

“`python

假设 df 已经通过 read_excel 成功加载

查看列名

print(“\n数据框列名:”)
print(df.columns)

选择单列数据 (返回一个 Series)

注意:如果列名中包含空格或特殊字符,需要使用方括号表示法

if ‘Quantity’ in df.columns:
quantity_series = df[‘Quantity’]
print(“\n选择 ‘Quantity’ 列:”)
print(quantity_series.head())

选择多列数据 (返回一个 DataFrame)

if ‘Product’ in df.columns and ‘Price’ in df.columns:
product_price_df = df[[‘Product’, ‘Price’]]
print(“\n选择 ‘Product’ 和 ‘Price’ 列:”)
print(product_price_df.head())

按条件筛选行

例如,筛选 Quantity 大于 10 的行

if ‘Quantity’ in df.columns:
high_quantity_sales = df[df[‘Quantity’] > 10]
print(“\n筛选 Quantity 大于 10 的行:”)
print(high_quantity_sales.head())

排序数据

if ‘Price’ in df.columns:
sorted_by_price = df.sort_values(by=’Price’, ascending=False)
print(“\n按 Price 降序排序:”)
print(sorted_by_price.head())

数据汇总统计

if ‘Quantity’ in df.columns and ‘Price’ in df.columns:
print(“\nQuantity 和 Price 的描述性统计:”)
print(df[[‘Quantity’, ‘Price’]].describe())
“`

这些只是 Pandas 数据操作的冰山一角。一旦数据进入 DataFrame,你可以进行各种清洗、转换、分组、聚合、合并等复杂操作,为后续的分析或建模打下基础。

6. 最佳实践建议

  • 明确文件路径: 始终使用明确的文件路径,最好是绝对路径,避免因当前工作目录变化导致 FileNotFoundError
  • 安装必要引擎: 在开始前确保安装了 openpyxlxlrd,以覆盖 .xlsx.xls 两种常见格式。
  • 先探索文件: 在编写代码前,最好先用 Excel 软件打开文件,了解其结构:有多少个工作表?标题在哪一行?是否有额外的信息?数据从哪一行哪一列开始?哪些列是日期?哪些列可能包含特殊字符或表示缺失?这有助于你选择正确的 read_excel 参数。
  • 指定 sheet_name: 除非你确定只需要第一个工作表,否则明确指定 sheet_name 是个好习惯,可以避免未来文件结构变化带来的问题。
  • 指定 header: 如果标题不在第一行或没有标题,一定要使用 header 参数。
  • 使用 usecols: 对于大文件,只读取你需要的列。这能显著提高效率并减少内存占用。
  • 指定 dtype: 如果对某些列的数据类型有明确要求(特别是日期、数字作为字符串),使用 dtype 参数进行强制转换,避免自动推断错误。
  • 处理缺失值: 使用 na_values 确保所有表示缺失的字符串都被正确识别。
  • 处理日期: 使用 parse_dates 参数确保日期列被正确解析为日期时间类型。
  • 逐步构建代码: 对于复杂的 Excel 文件,不要试图一次性用所有参数解决问题。可以先用基本用法读取,然后根据需要逐步添加和调整参数,观察每次修改后的 DataFrame 结构和数据类型。
  • 错误处理: 使用 try...except 块来捕获文件不存在或其他读取过程中可能发生的错误,提高代码的健壮性。

7. 总结

Pandas 的 read_excel() 函数是 Python 进行 Excel 数据处理的强大入口。通过灵活运用 sheet_name, header, index_col, usecols, dtype, na_values, skiprows, nrows, parse_dates, converters 等参数,你可以轻松应对各种复杂结构的 Excel 文件,将数据准确、高效地加载到 DataFrame 中。

掌握了 read_excel() 的用法,你就迈出了使用 Pandas 进行数据分析的第一步。加载数据只是开始,接下来你可以利用 Pandas 丰富的 API 对数据进行清洗、转换、分析、可视化等操作,释放数据的巨大潜力。

希望这篇详细的入门指南能够帮助你理解并熟练使用 Pandas 读取 Excel 文件。现在,找一个 Excel 文件,动手尝试一下吧!实践是最好的学习方式。祝你数据处理愉快!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部