使用pandas的read_excel()函数是读取excel文件最直接且强大的方法,能将.xls或.xlsx文件转化为dataframe;2. 处理多工作表时,可通过sheet_name参数指定单个工作表(名称或索引)、设置为none读取所有工作表(返回字典),或传入列表读取多个指定工作表;3. 常见错误包括filenotfounderror(路径错误)、文件格式异常或缺失依赖库(如openpyxl/xlrd),可通过try-except捕获并提示安装对应库;4. 性能优化策略包括使用usecols仅读取必要列、skiprows和nrows跳过无关行或限制读取行数、dtype预先指定列类型以减少内存和推断时间;5. 数据清洗与分析步骤包括:用isnull().sum()检查缺失值并用dropna()或fillna()处理,用drop_duplicates()删除重复行,通过astype()、to_datetime()等转换数据类型,rename()重命名列,最后进行head()/info()/describe()概览及value_counts()、groupby()等初步分析,为后续深入分析奠定基础。

Python要读取Excel文件,最直接、最强大也几乎是行业标准的方案,就是使用
pandas
read_excel()
要读取Excel文件,
pandas
read_excel
import pandas as pd
# 假设你的Excel文件名为 'my_data.xlsx' 并且在当前目录下
try:
df = pd.read_excel('my_data.xlsx')
print("成功读取Excel文件,前5行数据如下:")
print(df.head())
except FileNotFoundError:
print("错误:文件未找到。请检查文件路径和名称是否正确。")
except Exception as e:
print(f"读取文件时发生错误:{e}")
# 如果Excel文件在特定路径,比如桌面上的一个文件夹
# df = pd.read_excel('/Users/your_username/Desktop/data/sales_report.xlsx')
# 很多时候,Excel文件会有多个工作表(sheet),或者数据不是从第一行开始的
# 这时候就需要用到一些参数了。比如,指定读取名为 'Sheet2' 的工作表
# 或者指定数据从第3行开始(跳过前2行),并且只读取前100行
# df_specific = pd.read_excel('my_data.xlsx', sheet_name='Sheet2', skiprows=2, nrows=100)
# print("\n读取指定工作表和行数后的数据:")
# print(df_specific.head())
# 另一个常用场景是只读取某些列。比如,我只需要 '产品名称' 和 '销售额' 这两列
# df_selected_cols = pd.read_excel('my_data.xlsx', usecols=['产品名称', '销售额'])
# print("\n只读取指定列后的数据:")
# print(df_selected_cols.head())对我个人而言,
read_excel
skiprows
立即学习“Python免费学习笔记(深入)”;
Excel文件往往不是单枪匹马,它们通常包含多个工作表(sheet)。这种结构在数据整理时既提供了便利,也可能带来一点小麻烦,尤其是在你想一次性读取所有数据或者特定数据时。
pandas
read_excel
sheet_name
最直接的情况是你知道要读取哪个工作表,你可以传入工作表的名称(字符串)或者索引(整数,从0开始)。比如,我常常会把原始数据放在第一个sheet,分析结果放在第二个,这时候我就会明确指定
sheet_name=0
sheet_name='原始数据'
# 读取名为 '销售数据' 的工作表
df_sales = pd.read_excel('multi_sheet_data.xlsx', sheet_name='销售数据')
print("\n--- '销售数据' 工作表内容 ---")
print(df_sales.head())
# 或者,读取第二个工作表(索引为1)
df_customers = pd.read_excel('multi_sheet_data.xlsx', sheet_name=1)
print("\n--- 第二个工作表内容 ---")
print(df_customers.head())但有时,我可能需要把所有工作表都读进来,或者只关心其中几个。这时候,
sheet_name
如果你把
sheet_name
None
pandas
# 读取所有工作表
all_sheets = pd.read_excel('multi_sheet_data.xlsx', sheet_name=None)
print("\n--- 所有工作表(字典形式)的键 ---")
print(all_sheets.keys())
# 访问其中一个工作表
df_products = all_sheets['产品列表']
print("\n--- '产品列表' 工作表内容 ---")
print(df_products.head())如果你只关心几个特定的工作表,可以将它们的名称组成一个列表传给
sheet_name
pandas
# 只读取 '销售数据' 和 '产品列表' 这两个工作表
selected_sheets = pd.read_excel('multi_sheet_data.xlsx', sheet_name=['销售数据', '产品列表'])
print("\n--- 选定工作表(字典形式)的键 ---")
print(selected_sheets.keys())
# 访问 '销售数据' 工作表
df_sales_selected = selected_sheets['销售数据']
print("\n--- 选定工作表中的 '销售数据' 内容 ---")
print(df_sales_selected.head())处理多工作表时,我的经验是先明确自己的需求:是只需要一个特定的,还是需要全部,抑或是部分?根据这个选择合适的
sheet_name
在用Python读取Excel文件的过程中,即便
pandas
常见错误:
FileNotFoundError
try:
df = pd.read_excel('non_existent_file.xlsx')
except FileNotFoundError:
print("错误:文件不存在或路径错误。请仔细检查文件路径和名称。")XLRDError
openpyxl.utils.exceptions.InvalidFileException
xlsx
xls
pandas
.xlsx
openpyxl
.xls
xlrd
pip install openpyxl
pip install xlrd
# 尝试读取一个可能损坏或格式不对的文件
try:
df = pd.read_excel('corrupted_file.xlsx')
except Exception as e:
print(f"读取文件时发生格式或引擎错误:{e}")
print("提示:尝试安装 'openpyxl' (针对.xlsx) 或 'xlrd' (针对.xls)。")数据类型推断错误 / ParserError
pandas
dtype
# 假设 'ID' 列可能混有数字和文本,强制其为字符串
# df = pd.read_excel('mixed_data.xlsx', dtype={'ID': str, '金额': float})性能考量:
当Excel文件变得非常大,几十兆甚至上百兆时,直接
pd.read_excel()
只读取必要的列 (usecols
# 只读取 '订单号', '产品名称', '数量' 三列
df_small = pd.read_excel('large_sales_data.xlsx', usecols=['订单号', '产品名称', '数量'])
print(f"只读取部分列后,DataFrame的大小:{df_small.shape}")跳过不必要的行 (skiprows
nrows
skiprows
nrows
# 跳过前5行,只读取接下来的1000行
df_sample = pd.read_excel('large_sales_data.xlsx', skiprows=5, nrows=1000)
print(f"跳过前5行并读取1000行后,DataFrame的大小:{df_sample.shape}")指定数据类型 (dtype
pandas
int
pandas
float
# 明确指定列的数据类型,减少内存占用和推断时间
data_types = {
'订单号': str,
'产品名称': str,
'数量': int,
'销售额': float,
'日期': 'datetime64[ns]' # 或者 pd.to_datetime 之后再转换
}
df_typed = pd.read_excel('large_sales_data.xlsx', dtype=data_types)
print("指定数据类型后读取成功。")分块读取(对于Excel文件不直接支持,但思路可借鉴): 虽然
read_excel
read_csv
chunksize
skiprows
nrows
我的经验是,在处理任何大型Excel文件之前,先用
usecols
nrows
把Excel数据成功读取到
pandas
数据清洗:
清洗的核心目标是让数据变得“干净”和“可用”。
处理缺失值 (NaN
pandas
NaN
df.isnull().sum()
print("\n--- 缺失值统计 ---")
print(df.isnull().sum())df.dropna()
# 删除所有包含缺失值的行
df_cleaned_rows = df.dropna()
# 删除所有包含缺失值的列
# df_cleaned_cols = df.dropna(axis=1)
print("\n--- 删除缺失值后的数据(前5行) ---")
print(df_cleaned_rows.head())df.fillna()
# 用列的平均值填充 '销售额' 列的缺失值
df['销售额'] = df['销售额'].fillna(df['销售额'].mean())
# 用 '未知' 填充 '客户名称' 列的缺失值
df['客户名称'] = df['客户名称'].fillna('未知')
print("\n--- 填充缺失值后的数据('销售额'和'客户名称'列) ---")
print(df.head())处理重复值: Excel里录入数据时,不小心重复录入的情况很常见。
df.duplicated()
df.drop_duplicates()
# 假设 df 已经加载
print(f"\n原始数据行数:{len(df)}")
df_no_duplicates = df.drop_duplicates()
print(f"删除重复行后数据行数:{len(df_no_duplicates)}")数据类型转换:
pandas
df['列名'].astype(desired_type)
pd.to_datetime()
pd.to_numeric()
# 假设 '日期' 列被读成了字符串,转换为日期类型
df['日期'] = pd.to_datetime(df['日期'], errors='coerce') # errors='coerce' 会把无法转换的变成NaT
# 确保 '数量' 列是整数
df['数量'] = pd.to_numeric(df['数量'], errors='coerce').fillna(0).astype(int)
print("\n--- 转换数据类型后的信息 ---")
print(df.info())重命名列: Excel的列名可能包含空格、特殊字符,或者不够直观。
df.rename(columns={'旧列名': '新列名'})df = df.rename(columns={'产品名称': 'Product Name', '销售额': 'Sales Amount'})
print("\n--- 重命名列后的列名 ---")
print(df.columns)初步分析:
数据清洗完成后,就可以进行初步的探索性数据分析(EDA)了。这就像是给数据做个体检,快速了解它的全貌和潜在规律。
快速概览:
df.head()
df.tail()
df.info()
df.describe()
print("\n--- 数据概览 ---")
print(df.info())
print("\n--- 描述性统计 ---")
print(df.describe())查看唯一值和频次:
df['列名'].unique()
df['列名'].value_counts()
print("\n--- 'Product Name' 列的唯一值 ---")
print(df['Product Name'].unique())
print("\n--- 'Product Name' 列的销售数量统计 ---")
print(df['Product Name'].value_counts())简单筛选和聚合:
筛选数据:
df[df['列名'] > value]
分组聚合:
df.groupby('分组列')['聚合列'].sum()# 筛选出销售额大于10000的记录
high_sales = df[df['Sales Amount'] > 10000]
print("\n--- 销售额大于10000的记录(前5行) ---")
print(high_sales.head())
# 按产品名称统计总销售额
total_sales_by_product = df.groupby('Product Name')['Sales Amount'].sum().sort_values(ascending=False)
print("\n--- 各产品总销售额 ---")
print(total_sales_by_product.head())这些步骤构成了我处理Excel数据的基本流程。它们看似简单,但每一步都至关重要,能够帮助你从原始、混乱的数据中提炼出有价值的信息,为更深入的分析打下坚实的基础。
以上就是Python怎样读取Excel文件?pandas库详细操作指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号