看过来
《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
、None
0
None
(读取所有工作表)。header
int
、list of int
、None
0
None
(不使用表头)。names
array-like
、None
None
index_col
int
、str
、sequence of int / str
、False
、None
None
None
,则使用默认的整数索引。可以指定单个列或多个列作为索引。usecols
list-like
、callable
、str
、int
、None
None
'A:C'
)、Excel 列范围或返回布尔值的函数,用于选择需要的列。converters
dict
、None
None
true_values
list
、None
None
True
。false_values
list
、None
None
False
。skiprows
list-like
、int
、callable
、None
None
nrows
int
、None
None
nrows
行数据。na_values
scalar
、str
、list-like
、dict
、None
None
NaN
)。例如,可以将 'N/A'
或 'NULL'
视为缺失值。parse_dates
bool
、list
、dict
、False
False
True
(解析所有可能的日期列)、指定具体的列名列表或使用字典进行详细配置。date_parser
callable
、None
None
date_format
str
、None
None
thousands
str
或 None
None
','
可以正确解析像 1,000
这样的数字。comment
str
、None
None
skipfooter
int
、None
0
dtype_backend
str
或 _NoDefault
<no_default>
'numpy_nullable'
和 'pyarrow'
。通常无需修改,默认设置即可。kwargs
None
openpyxl
或 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