看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.ExcelFile.parse 方法是 pandas.ExcelFile 对象的一个重要方法,用于从指定的 Excel 工作表中读取数据并将其转换为 DataFrame 对象。通过该方法,用户可以灵活地控制数据的读取过程,适用于处理包含多个工作表或复杂数据结构的 Excel 文件。
ExcelFile.parse(
sheet_name=0,
header=0,
names=None,
index_col=None,
usecols=None,
converters=None,
true_values=None,
false_values=None,
skiprows=None,
nrows=None,
na_values=None,
parse_dates=False,
date_parser=<no_default>,
date_format=None,
thousands=None,
comment=None,
skipfooter=0,
dtype_backend=<no_default>,
**kwds
)
sheet_name
str、int、list、None0None(读取所有工作表)。header
int、list of int、None0None(不使用表头)。names
array-like、NoneNoneindex_col
int、str、sequence of int / str、False、NoneNoneNone,则使用默认的整数索引。可以指定单个列或多个列作为索引。usecols
list-like、callable、str、int、NoneNone'A:C')、Excel 列范围或返回布尔值的函数,用于选择需要的列。converters
dict、NoneNonetrue_values
list、NoneNoneTrue。false_values
list、NoneNoneFalse。skiprows
list-like、int、callable、NoneNonenrows
int、NoneNonenrows 行数据。na_values
scalar、str、list-like、dict、NoneNoneNaN)。例如,可以将 'N/A' 或 'NULL' 视为缺失值。parse_dates
bool、list、dict、FalseFalseTrue(解析所有可能的日期列)、指定具体的列名列表或使用字典进行详细配置。date_parser
callable、NoneNonedate_format
str、NoneNonethousands
str 或 NoneNone',' 可以正确解析像 1,000 这样的数字。comment
str、NoneNoneskipfooter
int、None0dtype_backend
str 或 _NoDefault<no_default>'numpy_nullable' 和 'pyarrow'。通常无需修改,默认设置即可。kwargs
Noneopenpyxl 或 xlrd)的其他参数,用于进一步控制数据的读取方式。pandas.DataFrame 或 dict(如果 sheet_name=None)sheet_name 是单个工作表的名称或索引,返回一个 DataFrame 对象。sheet_name=None,则返回一个包含所有工作表数据的字典,键为工作表名称,值为对应的 DataFrame 对象。parse 方法可以帮助用户选择性地读取特定的工作表数据。chunksize 和 nrows 等参数,可以分块读取大型 Excel 文件,节省内存并提高性能。converters、dtype 和 parse_dates 等参数,可以在读取数据的同时进行预处理和清洗。parse 方法可以动态地读取和处理不同的工作表数据。假设有一个名为 data.xlsx 的 Excel 文件,包含多个工作表。
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 打印所有工作表名称
print(excel_file.sheet_names)
输出示例:
['Sheet1', 'Sheet2', 'SalesData', 'Employees']
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 读取 'SalesData' 的数据
df_sales = excel_file.parse('SalesData')
print(df_sales)
输出示例:
产品 销量 收入
0 A 1000 50000
1 B 800 40000
2 C 600 30000
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 读取所有工作表的数据并存储到字典中
data_dict = {sheet: excel_file.parse(sheet) for sheet in excel_file.sheet_names}
# 打印各个工作表的数据
for sheet, df in data_dict.items():
print(f"工作表名称: {sheet}")
print(df)
print("\n")
输出示例:
工作表名称: Sheet1
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
工作表名称: Sheet2
产品 销量 收入
0 A 1000 50000
1 B 800 40000
2 C 600 30000
工作表名称: SalesData
产品 销量 收入
0 A 1000 50000
1 B 800 40000
2 C 600 30000
工作表名称: Employees
姓名 部门 工资
0 张三 IT 7000
1 李四 销售 6500
2 王五 人事 6000
3 赵六 IT 7200
4 周七 销售 6800
假设我们只关心 Sheet1 中的 姓名 和 城市 列,并将 年龄 列的数据类型指定为整数。
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 读取 'Sheet1' 的特定列并指定数据类型
df_sheet1 = excel_file.parse(
sheet_name='Sheet1',
usecols=['姓名', '城市'],
dtype={'年龄': 'Int64'}, # 虽然未读取 '年龄' 列,但此参数用于示例
index_col=None
)
print(df_sheet1)
输出示例:
姓名 城市
0 艾丽丝 纽约
1 鲍勃 洛杉矶
2 查理 芝加哥
假设 Sheet1 的第二行包含一些注释或无关数据,我们需要跳过它,并将 'N/A' 视为缺失值。
修改后的 Sheet1 内容
| 姓名 | 年龄 | 城市 |
|---|---|---|
| 艾丽丝 | 30 | 纽约 |
| N/A | N/A | N/A |
| 鲍勃 | 25 | 洛杉矶 |
| 查理 | 35 | 芝加哥 |
代码示例
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 读取 'Sheet1',跳过第1行(索引从0开始),并处理缺失值
df_sheet1 = excel_file.parse(
sheet_name='Sheet1',
skiprows=1,
na_values=['N/A'],
keep_default_na=True
)
print(df_sheet1)
输出示例
姓名 年龄 城市
0 鲍勃 25 洛杉矶
1 查理 35 芝加哥
假设 Sheet1 中有一列 出生日期,格式为 'DD-MM-YYYY',我们希望将其解析为日期时间类型。
修改后的 Sheet1 内容
| 姓名 | 年龄 | 城市 | 出生日期 |
|---|---|---|---|
| 艾丽丝 | 30 | 纽约 | 01-01-1990 |
| 鲍勃 | 25 | 洛杉矶 | 15-05-1995 |
| 查理 | 35 | 芝加哥 | 23-07-1985 |
代码示例
import pandas as pd
from datetime import datetime
# 自定义日期解析函数
def custom_date_parser(x):
return datetime.strptime(x, '%d-%m-%Y')
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 读取 'Sheet1' 并解析 '出生日期' 列
df_sheet1 = excel_file.parse(
sheet_name='Sheet1',
parse_dates=['出生日期'],
date_parser=custom_date_parser
)
print(df_sheet1)
print(df_sheet1.dtypes)
输出示例
姓名 年龄 城市 出生日期
0 艾丽丝 30 纽约 1990-01-01
1 鲍勃 25 洛杉矶 1995-05-15
2 查理 35 芝加哥 1985-07-23
姓名 object
年龄 int64
城市 object
出生日期 datetime64[ns]
dtype: object
假设 data.xlsx 包含多个工作表,每个工作表代表不同地区的销售数据。我们希望读取所有工作表的数据并合并为一个统一的 DataFrame。
多个工作表内容
Sheet1 (北美)
| 产品 | 销量 | 收入 |
|---|---|---|
| A | 1000 | 50000 |
| B | 800 | 40000 |
Sheet2 (欧洲)
| 产品 | 销量 | 收入 |
|---|---|---|
| A | 900 | 45000 |
| C | 700 | 35000 |
代码示例
import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 获取所有工作表名称
sheets = excel_file.sheet_names
# 初始化一个空列表用于存储各工作表的 DataFrame
df_list = []
# 遍历所有工作表,读取数据并添加地区信息
for sheet in sheets:
df = excel_file.parse(sheet)
df['地区'] = sheet # 添加地区列
df_list.append(df)
# 合并所有 DataFrame
combined_df = pd.concat(df_list, ignore_index=True)
print(combined_df)
输出示例
产品 销量 收入 地区
0 A 1000 50000 北美
1 B 800 40000 北美
2 A 900 45000 欧洲
3 C 700 35000 欧洲
sheet_name=None 读取所有工作表import pandas as pd
# 创建 ExcelFile 对象
excel_file = pd.ExcelFile('data.xlsx')
# 使用 sheet_name=None 读取所有工作表
all_sheets_df = excel_file.parse(sheet_name=None)
# 打印所有工作表的数据
for sheet, df in all_sheets_df.items():
print(f"工作表名称: {sheet}")
print(df)
print("\n")
输出示例
工作表名称: Sheet1
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
工作表名称: Sheet2
产品 销量 收入
0 A 1000 50000
1 B 800 40000
2 C 600 30000
parse 方法 是 pandas.ExcelFile 对象中用于读取指定工作表数据的核心方法。sheet_name、header、usecols、converters 等,用户可以精确控制数据的读取过程,适应不同的数据结构和需求。parse 方法结合 sheet_names 属性能够大幅提升数据处理的效率和灵活性。parse 方法可以实现高效的数据清洗、转换和分析工作流。掌握 parse 方法的使用,可以帮助用户更好地管理和利用 Excel 文件中的多工作表数据,充分发挥 Pandas 强大的数据处理能力。
更新时间:2024-10-10 15:50:17 标签:pandas python excel