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

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

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

概述

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

方式一:pandas(最簡潔)

特點

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

實現(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)換多個CSV文件
  • 需要保留數(shù)據(jù)格式

方式二:openpyxl(最靈活)

特點

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

實現(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)

            # 第一行格式化為標題
            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(高性能)

特點

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

實現(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(精細控制)

特點

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

實現(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ù)驗證邏輯
  • 復(fù)雜的CSV結(jié)構(gòu)

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

特點

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

實現(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è)級報告

庫的安裝

# 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: 需要多個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)

最佳實踐建議

選擇合適的庫

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

數(shù)據(jù)驗證

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

錯誤處理

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ù)雜格式時
xlsxwriter????超大文件時

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

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

相關(guān)文章

  • python3獲取當前文件的上一級目錄實例

    python3獲取當前文件的上一級目錄實例

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

    centos7中安裝python3.6.4的教程

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

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

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

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

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

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

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

    使用Python進行圖像批處理的方法示例

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

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

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

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

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

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

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

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

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

最新評論

咸阳市| 田东县| 富川| 丽江市| 大邑县| 偃师市| 万荣县| 甘孜县| 武安市| 南安市| 宁明县| 中宁县| 洛阳市| 永川市| 凤山市| 固始县| 错那县| 霸州市| 原阳县| 衡阳县| 邯郸县| 正镶白旗| 栖霞市| 镇原县| 石楼县| 滦南县| 江阴市| 巴彦淖尔市| 元氏县| 彭水| 桑日县| 凌云县| 丹江口市| 陆川县| 林口县| 墨玉县| 仁寿县| 施甸县| 乌拉特前旗| 双桥区| 潍坊市|