最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python將CSV轉(zhuǎn)Excel的幾種方式匯總

 更新時(shí)間:2026年04月10日 08:26:29   作者:小莊-Python辦公  
本文介紹了5種將CSV文件轉(zhuǎn)換為Excel格式的方法,包括使用pandas(簡潔高效)、openpyxl(功能全面)、xlsxwriter(高性能)、csv模塊+openpyxl(精細(xì)控制)和pandas+美化(專業(yè)級),每種方法都有其特點(diǎn)和適用場景,適用于不同需求的數(shù)據(jù)處理和轉(zhuǎn)換任務(wù)

概述

在日常數(shù)據(jù)處理工作中,CSV(逗號分隔值)文件是最常見的數(shù)據(jù)格式之一。但有時(shí)我們需要將CSV文件轉(zhuǎn)換為Excel格式以便進(jìn)行更復(fù)雜的數(shù)據(jù)操作、可視化和共享。Python提供了多種成熟的庫來完成這個(gè)任務(wù),各有優(yōu)劣。本文將深入介紹5種實(shí)現(xiàn)方式,幫助你選擇最適合的方案。

方式一:pandas(最簡潔)

特點(diǎn)

  • ? 代碼最簡潔,僅需一行
  • ? 功能完整,支持多sheet轉(zhuǎn)換
  • ? 性能優(yōu)秀,適合大文件
  • ?? 需要openpyxl或xlsxwriter作為引擎

實(shí)現(xiàn)代碼

import pandas as pd

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

# 指定sheet名稱
df.to_excel('output.xlsx', sheet_name='數(shù)據(jù)', 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)

適用場景

  • 數(shù)據(jù)分析和處理
  • 批量轉(zhuǎn)換多個(gè)CSV文件
  • 需要保留數(shù)據(jù)格式

方式二:openpyxl(最靈活)

特點(diǎn)

  • ? 功能最全面,支持格式化、公式、圖表
  • ? 適合復(fù)雜的Excel操作
  • ? 可修改現(xiàn)有Excel文件
  • ?? 性能稍低,代碼更復(fù)雜

實(shí)現(xiàn)代碼

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

# 創(chuàng)建工作簿
wb = Workbook()
ws = wb.active
ws.title = '數(shù)據(jù)'

# 從CSV讀取數(shù)據(jù)
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)

            # 第一行格式化為標(biāo)題
            if row_idx == 1:
                cell.font = Font(bold=True, color='FFFFFF')
                cell.fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')

# 自適應(yīng)列寬
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')

適用場景

  • 需要自定義格式和樣式
  • 添加公式或圖表
  • 修改現(xiàn)有Excel文件

方式三:xlsxwriter(高性能)

特點(diǎn)

  • ? 性能最快,特別是大文件
  • ? 功能豐富,支持圖表
  • ? 只寫不讀(寫入速度快)
  • ?? 不能修改現(xiàn)有文件,不支持讀操作

實(shí)現(xiàn)代碼

import csv
import xlsxwriter

# 創(chuàng)建Excel文件
workbook = xlsxwriter.Workbook('output.xlsx')
worksheet = workbook.add_worksheet('數(shù)據(jù)')

# 定義格式
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)

# 凍結(jié)首行
worksheet.freeze_panes(1, 0)

workbook.close()

適用場景

  • 處理超大CSV文件(百萬行+)
  • 需要快速轉(zhuǎn)換
  • 簡單的格式需求

方式四:csv模塊 + openpyxl(精細(xì)控制)

特點(diǎn)

  • ? 對CSV解析控制最細(xì)致
  • ? 處理特殊字符和編碼
  • ? 結(jié)合openpyxl可實(shí)現(xiàn)完整功能
  • ?? 代碼相對冗長

實(shí)現(xiàn)代碼

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轉(zhuǎn)換為Excel

    參數(shù):
        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"? 轉(zhuǎn)換完成: {excel_file}")

# 使用示例
csv_to_excel('data.csv', 'output.xlsx')

適用場景

  • 需要處理特殊編碼
  • 自定義數(shù)據(jù)驗(yàn)證邏輯
  • 復(fù)雜的CSV結(jié)構(gòu)

方式五:pandas + 樣式美化(專業(yè)級)

特點(diǎn)

  • ? 結(jié)合pandas和openpyxl的最佳實(shí)踐
  • ? 代碼簡潔且功能完整
  • ? 輸出專業(yè)美觀
  • ? 適合商業(yè)場景

實(shí)現(xiàn)代碼

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轉(zhuǎn)換為格式化的Excel(專業(yè)級)
    """
    # 第一步:使用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')
    )

    # 應(yīng)用樣式到所有單元格
    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

    # 自適應(yīng)列寬
    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

    # 凍結(jié)首行
    ws.freeze_panes = 'A2'

    wb.save(excel_file)
    print(f"? 專業(yè)級轉(zhuǎn)換完成: {excel_file}")
    print(f"?? 數(shù)據(jù)量: {len(df)} 行 × {len(df.columns)} 列")

# 使用示例
csv_to_excel_pro('data.csv', 'output.xlsx', sheet_name='數(shù)據(jù)')

性能對比

方式速度功能易用性推薦場景
pandas????????????日常數(shù)據(jù)分析
openpyxl???????????復(fù)雜格式需求
xlsxwriter?????????????超大文件處理
csv + openpyxl??????????特殊需求
pandas + 美化?????????????專業(yè)級報(bào)告

庫的安裝

# pandas(包含Excel支持)
pip install pandas openpyxl

# 僅xlsxwriter
pip install xlsxwriter

# 僅openpyxl
pip install openpyxl

常見問題解決

Q1: 編碼問題導(dǎo)致亂碼?

# 使用encoding參數(shù)指定編碼
df = pd.read_csv('data.csv', encoding='gbk')  # 或 utf-8, gb2312

Q2: 大文件內(nèi)存溢出?

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

Q3: 保留原始數(shù)據(jù)類型?

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

Q4: 需要多個(gè)CSV合并為一個(gè)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)

最佳實(shí)踐建議

選擇合適的庫

  • 日常使用:優(yōu)先pandas(簡潔高效)
  • 格式復(fù)雜:選用openpyxl(功能完整)
  • 超大文件:使用xlsxwriter(性能最優(yōu))

數(shù)據(jù)驗(yàn)證

# 轉(zhuǎn)換前檢查
assert not df.isnull().any().any(), "存在空值"
assert len(df) > 0, "數(shù)據(jù)為空"

錯(cuò)誤處理

try:
    df = pd.read_csv('data.csv')
    df.to_excel('output.xlsx', index=False)
except FileNotFoundError:
    print("? 文件不存在")
except Exception as e:
    print(f"? 轉(zhuǎn)換失敗: {e}")

日志記錄

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info(f"成功轉(zhuǎn)換 {len(df)} 行數(shù)據(jù)")

總結(jié)

方案優(yōu)先級原因
pandas?????簡潔、高效、功能足夠
openpyxl????需要復(fù)雜格式時(shí)
xlsxwriter????超大文件時(shí)

建議方案:在大多數(shù)場景下,使用 pandas + openpyxl 的組合方案(方式五)能夠提供最好的平衡——既簡潔易用,又能生成專業(yè)、美觀的輸出。

以上就是Python將CSV轉(zhuǎn)Excel的幾種方式匯總的詳細(xì)內(nèi)容,更多關(guān)于Python將CSV轉(zhuǎn)Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python3獲取當(dāng)前文件的上一級目錄實(shí)例

    python3獲取當(dāng)前文件的上一級目錄實(shí)例

    下面小編就為大家分享一篇python3獲取當(dāng)前文件的上一級目錄實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • centos7中安裝python3.6.4的教程

    centos7中安裝python3.6.4的教程

    Python3.6.4官方版是一款在適合開發(fā)人員使用的windows系統(tǒng)上運(yùn)行的腳本語言工具,Python3.6.4官方版是目前程序設(shè)計(jì)從業(yè)者必學(xué)的語言之一。這篇文章給大家介紹了centos7中安裝python3.6.4的教程,感興趣的朋友一起看看吧
    2019-12-12
  • python3+PyQt5實(shí)現(xiàn)文檔打印功能

    python3+PyQt5實(shí)現(xiàn)文檔打印功能

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)文檔打印功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上

    Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上

    這篇文章主要介紹了Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上,本文通過截圖實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python調(diào)用C語言的實(shí)現(xiàn)

    Python調(diào)用C語言的實(shí)現(xiàn)

    這篇文章主要介紹了Python調(diào)用C語言的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 使用Python進(jìn)行圖像批處理的方法示例

    使用Python進(jìn)行圖像批處理的方法示例

    在Python中進(jìn)行圖像批處理可以使用多種庫,如 Pillow、OpenCV 和 imageio,這些庫可以用來執(zhí)行各種圖像處理任務(wù),如調(diào)整大小、裁剪、旋轉(zhuǎn)、濾鏡應(yīng)用等,以下是使用這些庫進(jìn)行圖像批處理的示例,需要的朋友可以參考下
    2024-09-09
  • Anaconda使用IDLE的實(shí)現(xiàn)示例

    Anaconda使用IDLE的實(shí)現(xiàn)示例

    這篇文章主要介紹了Anaconda使用IDLE的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Django2.1集成xadmin管理后臺所遇到的錯(cuò)誤集錦(填坑)

    Django2.1集成xadmin管理后臺所遇到的錯(cuò)誤集錦(填坑)

    這篇文章主要介紹了Django2.1集成xadmin管理后臺所遇到的錯(cuò)誤集錦(填坑),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Pandas?實(shí)現(xiàn)MySQL日期函數(shù)的解決方法

    使用Pandas?實(shí)現(xiàn)MySQL日期函數(shù)的解決方法

    這篇文章主要介紹了用Pandas?實(shí)現(xiàn)MySQL日期函數(shù)的效果,Python是很靈活的語言,達(dá)成同一個(gè)目標(biāo)或有多種途徑,我提供的只是其中一種解決方法,需要的朋友可以參考下
    2023-02-02
  • Python-openpyxl表格讀取寫入的案例詳解

    Python-openpyxl表格讀取寫入的案例詳解

    這篇文章主要介紹了Python-openpyxl表格讀取寫入的案例分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評論

呼玛县| 井冈山市| 玉溪市| 互助| 肃宁县| 壤塘县| 陕西省| 双峰县| 松阳县| 江达县| 东光县| 永寿县| 虹口区| 辉县市| 仁寿县| 辽宁省| 讷河市| 遵义县| 宣威市| 常宁市| 昭平县| 梧州市| 宝兴县| 怀远县| 南雄市| 宁强县| 堆龙德庆县| 大田县| 闽清县| 诸暨市| 长岭县| 绥阳县| 木兰县| 东港市| 通江县| 神池县| 稻城县| 阿拉善右旗| 肃宁县| 原阳县| 彝良县|