Python将CSV转Excel的几种方式汇总

 更新时间:2026年04月10日 08:26:29   作者:小庄-Python办公  
本文介绍了5种将CSV文件转换为Excel格式的方法,包括使用pandas(简洁高效)、openpyxl(功能全面)、xlsxwriter(高性能)、csv模块+openpyxl(精细控制)和pandas+美化(专业级),每种方法都有其特点和适用场景,适用于不同需求的数据处理和转换任务

概述

在日常数据处理工作中,CSV(逗号分隔值)文件是最常见的数据格式之一。但有时我们需要将CSV文件转换为Excel格式以便进行更复杂的数据操作、可视化和共享。Python提供了多种成熟的库来完成这个任务,各有优劣。本文将深入介绍5种实现方式,帮助你选择最适合的方案。

方式一:pandas(最简洁)

特点

  • ✅ 代码最简洁,仅需一行
  • ✅ 功能完整,支持多sheet转换
  • ✅ 性能优秀,适合大文件
  • ⚠️ 需要openpyxl或xlsxwriter作为引擎

实现代码

import pandas as pd

# 基础用法
df = pd.read_csv('data.csv')
df.to_excel('output.xlsx', index=False)

# 指定sheet名称
df.to_excel('output.xlsx', sheet_name='数据', index=False)

# 多sheet写入
with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

适用场景

  • 数据分析和处理
  • 批量转换多个CSV文件
  • 需要保留数据格式

方式二:openpyxl(最灵活)

特点

  • ✅ 功能最全面,支持格式化、公式、图表
  • ✅ 适合复杂的Excel操作
  • ✅ 可修改现有Excel文件
  • ⚠️ 性能稍低,代码更复杂

实现代码

import csv
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill

# 创建工作簿
wb = Workbook()
ws = wb.active
ws.title = '数据'

# 从CSV读取数据
with open('data.csv', 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f)
    for row_idx, row in enumerate(csv_reader, 1):
        for col_idx, value in enumerate(row, 1):
            cell = ws.cell(row=row_idx, column=col_idx, value=value)

            # 第一行格式化为标题
            if row_idx == 1:
                cell.font = Font(bold=True, color='FFFFFF')
                cell.fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')

# 自适应列宽
for column in ws.columns:
    max_length = 0
    column_letter = column[0].column_letter
    for cell in column:
        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(高性能)

特点

  • ✅ 性能最快,特别是大文件
  • ✅ 功能丰富,支持图表
  • ✅ 只写不读(写入速度快)
  • ⚠️ 不能修改现有文件,不支持读操作

实现代码

import csv
import xlsxwriter

# 创建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并写入Excel
with open('data.csv', 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f)
    for row_idx, row in enumerate(csv_reader):
        for col_idx, value in enumerate(row):
            if row_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可实现完整功能
  • ⚠️ 代码相对冗长

实现代码

import csv
from openpyxl import Workbook
from openpyxl.utils import get_column_letter

def csv_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_name

    with open(csv_file, 'r', encoding=encoding) as f:
        csv_reader = csv.reader(f)
        for row_idx, row in enumerate(csv_reader, 1):
            for col_idx, value in enumerate(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的最佳实践
  • ✅ 代码简洁且功能完整
  • ✅ 输出专业美观
  • ✅ 适合商业场景

实现代码

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side

def csv_to_excel_pro(csv_file, excel_file, sheet_name='Sheet1'):
    """
    将CSV转换为格式化的Excel(专业级)
    """
    # 第一步:使用pandas读取CSV
    df = pd.read_csv(csv_file)

    # 第二步:用pandas写入Excel
    df.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')
    )

    # 应用样式到所有单元格
    for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
        for cell in row:
            cell.border = border
            cell.alignment = Alignment(horizontal='left', vertical='center', wrap_text=True)

            # 特殊处理头行
            if cell.row == 1:
                cell.fill = header_fill
                cell.font = header_font
                cell.alignment = header_alignment

    # 自适应列宽
    for column in ws.columns:
        max_length = 0
        column_letter = column[0].column_letter
        for cell in column:
            try:
                if len(str(cell.value)) > max_length:
                    max_length = len(str(cell.value))
            except:
                pass
        adjusted_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支持)
pip install pandas openpyxl

# 仅xlsxwriter
pip install xlsxwriter

# 仅openpyxl
pip install openpyxl

常见问题解决

Q1: 编码问题导致乱码?

# 使用encoding参数指定编码
df = pd.read_csv('data.csv', encoding='gbk')  # 或 utf-8, gb2312

Q2: 大文件内存溢出?

# 方案1:使用xlsxwriter(流式写入)
# 方案2:分块处理
chunks = pd.read_csv('data.csv', chunksize=10000)
for chunk in chunks:
    chunk.to_excel('output.xlsx', mode='a')

Q3: 保留原始数据类型?

# 指定dtype
df = pd.read_csv('data.csv', dtype={'ID': str, '金额': float})

Q4: 需要多个CSV合并为一个Excel?

import glob
import pandas as pd

# 读取所有CSV文件
csv_files = glob.glob('*.csv')

with pd.ExcelWriter('merged.xlsx') as writer:
    for csv_file in csv_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(性能最优)

数据验证

# 转换前检查
assert not df.isnull().any().any(), "存在空值"
assert len(df) > 0, "数据为空"

错误处理

try:
    df = pd.read_csv('data.csv')
    df.to_excel('output.xlsx', index=False)
except FileNotFoundError:
    print("❌ 文件不存在")
except Exception as e:
    print(f"❌ 转换失败: {e}")

日志记录

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info(f"成功转换 {len(df)} 行数据")

总结

方案优先级原因
pandas⭐⭐⭐⭐⭐简洁、高效、功能足够
openpyxl⭐⭐⭐⭐需要复杂格式时
xlsxwriter⭐⭐⭐⭐超大文件时

建议方案:在大多数场景下,使用 pandas + openpyxl 的组合方案(方式五)能够提供最好的平衡——既简洁易用,又能生成专业、美观的输出。

以上就是Python将CSV转Excel的几种方式汇总的详细内容,更多关于Python将CSV转Excel的资料请关注脚本之家其它相关文章!

相关文章

  • Python Matplotlib 基于networkx画关系网络图

    Python Matplotlib 基于networkx画关系网络图

    这篇文章主要介绍了Python Matplotlib 基于networkx画关系网络图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python代码连接到 Chat GPT API的方法

    Python代码连接到 Chat GPT API的方法

    Chat GPT 由于其独特、近乎准确且类似人类的响应,如今在互联网上引起了过多的讨论,本文讨论如何通过 Python 代码连接到 Chat GPT API,感兴趣的朋友一起看看吧
    2023-02-02
  • Python求两个list的差集、交集与并集的方法

    Python求两个list的差集、交集与并集的方法

    这篇文章主要介绍了Python求两个list的差集、交集与并集的方法,是Python集合数组操作中常用的技巧,需要的朋友可以参考下
    2014-11-11
  • python判断是空的实例分享

    python判断是空的实例分享

    在本篇内容里小编给大家整理的是关于python怎么判断是空的相关知识点内容,需要的朋友们学习下。
    2020-07-07
  • 使用Python导出Excel图表以及导出为图片的方法

    使用Python导出Excel图表以及导出为图片的方法

    这篇文章主要介绍了使用Python导出Excel图表以及导出为图片的方法,Python相关模块在Windows下操作office非常方便,需要的朋友可以参考下
    2015-11-11
  • Python中函数的多种格式和使用实例及小技巧

    Python中函数的多种格式和使用实例及小技巧

    这篇文章主要介绍了Python中函数的多种格式和使用实例及小技巧,本文讲解了普通格式、带收集位置参数的函数、带收集关键字参数的函数、函数特殊用法、内嵌函数和闭包等内容,需要的朋友可以参考下
    2015-04-04
  • 利用python计算均值、方差和标准差(Numpy和Pandas)

    利用python计算均值、方差和标准差(Numpy和Pandas)

    这篇文章主要给大家介绍了关于利用python计算均值、方差和标准差的相关资料,Numpy在Python中是一个通用的数组处理包,它提供了一个高性能的多维数组对象和用于处理这些数组的工具,它是使用Python进行科学计算的基础包,需要的朋友可以参考下
    2023-11-11
  • 一文带你深入了解Python中的深拷贝与浅拷贝数据

    一文带你深入了解Python中的深拷贝与浅拷贝数据

    在Python编程中,对象复制是一个常见但容易出错的操作,本文将系统讲解这两种拷贝方式的区别、应用场景及实现方法,感兴趣的小伙伴可以了解下
    2026-01-01
  • 详解python3实现的web端json通信协议

    详解python3实现的web端json通信协议

    本篇文章主要介绍了python3实现的web端json通信协议,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • python模仿网页版微信发送消息功能

    python模仿网页版微信发送消息功能

    这篇文章主要介绍了python模仿网页版微信发送消息功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论