当前位置: 首页 > news >正文

Pandas读取Excel文件教程:从入门到精通

Pandas是Python数据分析的核心库,提供了强大的Excel文件读取功能。本教程将全面介绍如何使用Pandas读取Excel文件,从基础操作到高级技巧。

一、基础读取方法

1. 安装依赖库

在开始前,确保已安装必要的库:

pip install pandas openpyxl xlrd
  • pandas: 数据分析核心库
  • openpyxl: 处理.xlsx文件
  • xlrd: 处理.xls文件(老版本)
2. 基本读取函数
import pandas as pd# 读取整个Excel文件
df = pd.read_excel('example.xlsx')# 读取指定工作表
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')# 查看前5行数据
print(df.head())
3. 常用参数说明
参数说明示例
sheet_name指定工作表sheet_name=0(索引)或sheet_name="Sheet1"
header指定表头行header=0(默认)
index_col指定索引列index_col=0
usecols指定读取列usecols="A:C"usecols=[0,1,2]
dtype指定列数据类型dtype={'列名': str}
na_values指定缺失值标识na_values=["NA", "NULL"]

二、进阶读取技巧

1. 读取多个工作表
# 方法1:读取所有工作表,返回字典
all_sheets = pd.read_excel('example.xlsx', sheet_name=None)# 方法2:读取指定多个工作表
sheets = pd.read_excel('example.xlsx', sheet_name=['Sheet1', 'Sheet2'])# 访问特定工作表
sheet1 = all_sheets['Sheet1']
2. 处理大型Excel文件
# 分块读取
chunk_size = 1000
chunks = pd.read_excel('large_file.xlsx', chunksize=chunk_size)for chunk in chunks:# 处理每个数据块process(chunk)# 只读取元数据(不加载数据)
with pd.ExcelFile('example.xlsx') as xls:sheet_names = xls.sheet_namesprint(f"工作表列表: {sheet_names}")
3. 读取特定区域数据
# 读取A1到C10区域
df = pd.read_excel('example.xlsx', usecols="A:C", nrows=10)# 跳过前3行(非表头)
df = pd.read_excel('example.xlsx', skiprows=3)# 跳过指定行(如1,3,5行)
df = pd.read_excel('example.xlsx', skiprows=[1,3,5])

三、数据类型处理

1. 指定列数据类型
# 指定特定列的数据类型
dtype_dict = {'ID': str,          # 强制转换为字符串'Amount': float,    # 转换为浮点数'Date': 'datetime64' # 转换为日期
}df = pd.read_excel('example.xlsx', dtype=dtype_dict)
2. 日期列处理
# 自动解析日期列
df = pd.read_excel('example.xlsx', parse_dates=['Birthday', 'OrderDate'])# 自定义日期格式
date_parser = lambda x: pd.to_datetime(x, format='%Y年%m月%d日')
df = pd.read_excel('example.xlsx', parse_dates=['Date'], date_parser=date_parser)
3. 处理混合数据类型
# 转换器函数处理复杂情况
converters = {'Phone': lambda x: str(x).replace(' ', ''),'Amount': lambda x: float(x.strip('¥'))
}df = pd.read_excel('example.xlsx', converters=converters)

四、高级应用技巧

1. 读取加密Excel文件
# 需要安装msoffcrypto-tool库
import msoffcryptodecrypted_file = io.BytesIO()
with open('encrypted.xlsx', 'rb') as f:office_file = msoffcrypto.OfficeFile(f)office_file.load_key(password='password')office_file.decrypt(decrypted_file)df = pd.read_excel(decrypted_file)
2. 处理合并单元格
# 使用openpyxl处理合并单元格
from openpyxl import load_workbookwb = load_workbook('merged_cells.xlsx')
ws = wb['Sheet1']# 获取合并单元格信息
merged_ranges = ws.merged_cells.ranges# 填充合并单元格值
for merged_range in merged_ranges:min_row, min_col, max_row, max_col = merged_range.boundstop_left_value = ws.cell(row=min_row, column=min_col).valuefor row in ws.iter_rows(min_row=min_row, max_row=max_row,min_col=min_col, max_col=max_col):for cell in row:cell.value = top_left_value# 保存处理后文件
wb.save('fixed_merged_cells.xlsx')
df = pd.read_excel('fixed_merged_cells.xlsx')
3. 读取Excel中的公式结果
# 需要设置openpyxl的data_only参数
wb = load_workbook('with_formulas.xlsx', data_only=True)
ws = wb['Sheet1']# 将数据转换为DataFrame
data = ws.values
columns = next(data)
df = pd.DataFrame(data, columns=columns)

五、性能优化

1. 加速读取方法
# 使用openpyxl的只读模式
df = pd.read_excel('large_file.xlsx', engine='openpyxl', read_only=True)# 禁用类型推断
df = pd.read_excel('example.xlsx', dtype=str)  # 全部读取为字符串后转换# 使用内存优化数据类型
dtype = {'ID': 'int32','Price': 'float32','Category': 'category'
}
df = pd.read_excel('example.xlsx', dtype=dtype)
2. 并行读取多个文件
from concurrent.futures import ThreadPoolExecutor
import globdef read_excel(file):return pd.read_excel(file)files = glob.glob('data/*.xlsx')with ThreadPoolExecutor() as executor:dfs = list(executor.map(read_excel, files))combined_df = pd.concat(dfs, ignore_index=True)

六、常见问题解决方案

1. 处理编码问题
# 指定编码方式
df = pd.read_excel('example.xlsx', encoding='utf-8')# 处理特殊字符
df = pd.read_excel('example.xlsx', encoding='latin1')
2. 内存不足处理
# 方法1:分块处理
chunksize = 10000
for chunk in pd.read_excel('large.xlsx', chunksize=chunksize):process(chunk)# 方法2:只读取必要列
df = pd.read_excel('large.xlsx', usecols=['col1', 'col2'])# 方法3:转换为更高效格式
df = pd.read_excel('large.xlsx').convert_dtypes()
3. 日期解析错误处理
# 自定义日期解析函数
def parse_date(date_str):try:return pd.to_datetime(date_str)except:return pd.NaTdf = pd.read_excel('dates.xlsx', parse_dates=['Date'], date_parser=parse_date)

七、最佳实践

  1. 数据验证:读取后立即检查数据形状和基本信息

    print(f"数据维度: {df.shape}")
    print(df.info())
    print(df.describe())
    
  2. 异常处理:添加适当的错误处理

    try:df = pd.read_excel('example.xlsx')
    except FileNotFoundError:print("文件不存在")
    except Exception as e:print(f"读取错误: {str(e)}")
    
  3. 数据清洗管道:创建可复用的数据处理流程

    def clean_excel_data(filepath):df = pd.read_excel(filepath)# 执行一系列清洗操作df = df.dropna()df = df.convert_dtypes()return df
    
  4. 性能监控:测量读取时间

    import time
    start = time.time()
    df = pd.read_excel('large.xlsx')
    print(f"读取时间: {time.time()-start:.2f}秒")
    

相关文章:

  • 制作一个简单的操作系统9
  • AI 编程工具:Augment Code
  • 手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段
  • Semantic Kernel也能充当MCP Client
  • 像拆盲盒一样读懂 XML:从新手到掌握它在大数据的用武之地
  • ​​激光雷达(LiDAR)数据​​ 的标准存储格式.las文件介绍
  • AI数字人:繁荣背后的伦理困境与法律迷局(8/10)
  • 【因果推断】(二)CV中的应用
  • 大肠杆菌诱导蛋白时OD600=0.6-0.8添加IPTG的思考-实验操作系列-009
  • Mysql日志undo redo binlog与更新一条数据的执行过程详解
  • 基于C#+Unity实现遇见李白小游戏
  • 【金仓数据库征文】金仓数据库KingbaseES:千行百业国产化征程中的璀璨之星
  • 使用yolo用python检测
  • 模式设计简介
  • java多线程(7.0)
  • GIT下载步骤
  • springboot如何管理多数据源?
  • 【6】GD32 高级通信外设 CAN、USBD
  • AUTOSAR图解==>AUTOSAR_SWS_SAEJ1939TransportLayer
  • 金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯
  • 哈工大赵杰:人形机器人要拓展人的能力而非一味复制,未来产业要做成至少10年
  • 嫦娥五号《月球样品借用协议》签约,2025中国航天公益形象大使公布
  • 过敏性鼻炎,不只是“打喷嚏”那么简单
  • 中纪报刊文:新时代反腐败斗争为党赢得历史主动
  • 特朗普:泽连斯基的言论对和平谈判非常有害