【Python办公】Python将CSV转Excel的几种方式
目录
- Python将CSV转Excel的几种方式
- 概述
- 方式一:pandas(最简洁)
- 特点
- 实现代码
- 适用场景
- 方式二:openpyxl(最灵活)
- 特点
- 实现代码
- 适用场景
- 方式三:xlsxwriter(高性能)
- 特点
- 实现代码
- 适用场景
- 方式四:csv模块 + openpyxl(精细控制)
- 特点
- 实现代码
- 适用场景
- 方式五:pandas + 样式美化(专业级)
- 特点
- 实现代码
- 性能对比
- 库的安装
- 常见问题解决
- Q1: 编码问题导致乱码?
- Q2: 大文件内存溢出?
- Q3: 保留原始数据类型?
- Q4: 需要多个CSV合并为一个Excel?
- 最佳实践建议
- 总结
- 参考资源
专栏导读
🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
🏳️🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
🏳️🌈 Github主页:请点击——> Github主页 求Star⭐
🏳️🌈 知乎主页:请点击——> 知乎主页 求关注
🏳️🌈 CSDN博客主页:请点击——> CSDN的博客主页 求关注
👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
❤️ 欢迎各位佬关注! ❤️
Python将CSV转Excel的几种方式
概述
在日常数据处理工作中,CSV(逗号分隔值)文件是最常见的数据格式之一。但有时我们需要将CSV文件转换为Excel格式以便进行更复杂的数据操作、可视化和共享。Python提供了多种成熟的库来完成这个任务,各有优劣。本文将深入介绍5种实现方式,帮助你选择最适合的方案。
方式一:pandas(最简洁)
特点
- ✅ 代码最简洁,仅需一行
- ✅ 功能完整,支持多sheet转换
- ✅ 性能优秀,适合大文件
- ⚠️ 需要openpyxl或xlsxwriter作为引擎
实现代码
importpandasaspd# 基础用法df=pd.read_csv('data.csv')df.to_excel('output.xlsx',index=False)# 指定sheet名称df.to_excel('output.xlsx',sheet_name='数据',index=False)# 多sheet写入withpd.ExcelWriter('output.xlsx')aswriter:df1.to_excel(writer,sheet_name='Sheet1',index=False)df2.to_excel(writer,sheet_name='Sheet2',index=False)适用场景
- 数据分析和处理
- 批量转换多个CSV文件
- 需要保留数据格式
方式二:openpyxl(最灵活)
特点
- ✅ 功能最全面,支持格式化、公式、图表
- ✅ 适合复杂的Excel操作
- ✅ 可修改现有Excel文件
- ⚠️ 性能稍低,代码更复杂
实现代码
importcsvfromopenpyxlimportWorkbookfromopenpyxl.stylesimportFont,PatternFill# 创建工作簿wb=Workbook()ws=wb.active ws.title='数据'# 从CSV读取数据withopen('data.csv','r',encoding='utf-8')asf:csv_reader=csv.reader(f)forrow_idx,rowinenumerate(csv_reader,1):forcol_idx,valueinenumerate(row,1):cell=ws.cell(row=row_idx,column=col_idx,value=value)# 第一行格式化为标题ifrow_idx==1:cell.font=Font(bold=True,color='FFFFFF')cell.fill=PatternFill(start_color='4472C4',end_color='4472C4',fill_type='solid')# 自适应列宽forcolumninws.columns:max_length=0column_letter=column[0].column_letterforcellincolumn:max_length=max(max_length,len(str(cell.value)))ws.column_dimensions[column_letter].width=min(max_length+2,50)wb.save('output.xlsx')适用场景
- 需要自定义格式和样式
- 添加公式或图表
- 修改现有Excel文件
方式三:xlsxwriter(高性能)
特点
- ✅ 性能最快,特别是大文件
- ✅ 功能丰富,支持图表
- ✅ 只写不读(写入速度快)
- ⚠️ 不能修改现有文件,不支持读操作
实现代码
importcsvimportxlsxwriter# 创建Excel文件workbook=xlsxwriter.Workbook('output.xlsx')worksheet=workbook.add_worksheet('数据')# 定义格式header_format=workbook.add_format({'bold':True,'bg_color':'#4472C4','font_color':'white','border':1})data_format=workbook.add_format({'border':1,'align':'left','valign':'vcenter'})# 读取CSV并写入Excelwithopen('data.csv','r',encoding='utf-8')asf:csv_reader=csv.reader(f)forrow_idx,rowinenumerate(csv_reader):forcol_idx,valueinenumerate(row):ifrow_idx==0:worksheet.write(row_idx,col_idx,value,header_format)else:worksheet.write(row_idx,col_idx,value,data_format)# 冻结首行worksheet.freeze_panes(1,0)workbook.close()适用场景
- 处理超大CSV文件(百万行+)
- 需要快速转换
- 简单的格式需求
方式四:csv模块 + openpyxl(精细控制)
特点
- ✅ 对CSV解析控制最细致
- ✅ 处理特殊字符和编码
- ✅ 结合openpyxl可实现完整功能
- ⚠️ 代码相对冗长
实现代码
importcsvfromopenpyxlimportWorkbookfromopenpyxl.utilsimportget_column_letterdefcsv_to_excel(csv_file,excel_file,sheet_name='Sheet1',encoding='utf-8'):""" 将CSV转换为Excel 参数: csv_file: CSV文件路径 excel_file: 输出Excel文件路径 sheet_name: Excel sheet名称 encoding: 文件编码 """wb=Workbook()ws=wb.active ws.title=sheet_namewithopen(csv_file,'r',encoding=encoding)asf:csv_reader=csv.reader(f)forrow_idx,rowinenumerate(csv_reader,1):forcol_idx,valueinenumerate(row,1):ws.cell(row=row_idx,column=col_idx,value=value)wb.save(excel_file)print(f"✅ 转换完成:{excel_file}")# 使用示例csv_to_excel('data.csv','output.xlsx')适用场景
- 需要处理特殊编码
- 自定义数据验证逻辑
- 复杂的CSV结构
方式五:pandas + 样式美化(专业级)
特点
- ✅ 结合pandas和openpyxl的最佳实践
- ✅ 代码简洁且功能完整
- ✅ 输出专业美观
- ✅ 适合商业场景
实现代码
importpandasaspdfromopenpyxlimportload_workbookfromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Sidedefcsv_to_excel_pro(csv_file,excel_file,sheet_name='Sheet1'):""" 将CSV转换为格式化的Excel(专业级) """# 第一步:使用pandas读取CSVdf=pd.read_csv(csv_file)# 第二步:用pandas写入Exceldf.to_excel(excel_file,sheet_name=sheet_name,index=False)# 第三步:使用openpyxl美化样式wb=load_workbook(excel_file)ws=wb.active# 定义样式header_fill=PatternFill(start_color='366092',end_color='366092',fill_type='solid')header_font=Font(bold=True,color='FFFFFF',size=12)header_alignment=Alignment(horizontal='center',vertical='center',wrap_text=True)border=Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))# 应用样式到所有单元格forrowinws.iter_rows(min_row=1,max_row=ws.max_row,min_col=1,max_col=ws.max_column):forcellinrow:cell.border=border cell.alignment=Alignment(horizontal='left',vertical='center',wrap_text=True)# 特殊处理头行ifcell.row==1:cell.fill=header_fill cell.font=header_font cell.alignment=header_alignment# 自适应列宽forcolumninws.columns:max_length=0column_letter=column[0].column_letterforcellincolumn:try:iflen(str(cell.value))>max_length:max_length=len(str(cell.value))except:passadjusted_width=min(max_length+2,50)ws.column_dimensions[column_letter].width=adjusted_width# 冻结首行ws.freeze_panes='A2'wb.save(excel_file)print(f"✅ 专业级转换完成:{excel_file}")print(f"📊 数据量:{len(df)}行 ×{len(df.columns)}列")# 使用示例csv_to_excel_pro('data.csv','output.xlsx',sheet_name='数据')性能对比
| 方式 | 速度 | 功能 | 易用性 | 推荐场景 |
|---|---|---|---|---|
| pandas | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 日常数据分析 |
| openpyxl | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 复杂格式需求 |
| xlsxwriter | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 超大文件处理 |
| csv + openpyxl | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 特殊需求 |
| pandas + 美化 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 专业级报告 |
库的安装
# pandas(包含Excel支持)pipinstallpandas openpyxl# 仅xlsxwriterpipinstallxlsxwriter# 仅openpyxlpipinstallopenpyxl常见问题解决
Q1: 编码问题导致乱码?
# 使用encoding参数指定编码df=pd.read_csv('data.csv',encoding='gbk')# 或 utf-8, gb2312Q2: 大文件内存溢出?
# 方案1:使用xlsxwriter(流式写入)# 方案2:分块处理chunks=pd.read_csv('data.csv',chunksize=10000)forchunkinchunks:chunk.to_excel('output.xlsx',mode='a')Q3: 保留原始数据类型?
# 指定dtypedf=pd.read_csv('data.csv',dtype={'ID':str,'金额':float})Q4: 需要多个CSV合并为一个Excel?
importglobimportpandasaspd# 读取所有CSV文件csv_files=glob.glob('*.csv')withpd.ExcelWriter('merged.xlsx')aswriter:forcsv_fileincsv_files:df=pd.read_csv(csv_file)sheet_name=csv_file.replace('.csv','')df.to_excel(writer,sheet_name=sheet_name,index=False)最佳实践建议
选择合适的库
- 日常使用:优先pandas(简洁高效)
- 格式复杂:选用openpyxl(功能完整)
- 超大文件:使用xlsxwriter(性能最优)
数据验证
# 转换前检查assertnotdf.isnull().any().any(),"存在空值"assertlen(df)>0,"数据为空"错误处理
try:df=pd.read_csv('data.csv')df.to_excel('output.xlsx',index=False)exceptFileNotFoundError:print("❌ 文件不存在")exceptExceptionase:print(f"❌ 转换失败:{e}")日志记录
importlogging logging.basicConfig(level=logging.INFO)logger=logging.getLogger(__name__)logger.info(f"成功转换{len(df)}行数据")
总结
| 方案 | 优先级 | 原因 |
|---|---|---|
| pandas | ⭐⭐⭐⭐⭐ | 简洁、高效、功能足够 |
| openpyxl | ⭐⭐⭐⭐ | 需要复杂格式时 |
| xlsxwriter | ⭐⭐⭐⭐ | 超大文件时 |
建议方案:在大多数场景下,使用pandas + openpyxl的组合方案(方式五)能够提供最好的平衡——既简洁易用,又能生成专业、美观的输出。
参考资源
- Pandas官方文档
- openpyxl文档
- xlsxwriter文档
更新于: 2026年4月
作者: Python数据处理团队
结尾
希望对初学者有帮助;致力于办公自动化的小小程序员一枚
希望能得到大家的【❤️一个免费关注❤️】感谢!
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
