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

Python中處理Excel數(shù)據(jù)的方法對(duì)比(pandas和openpyxl)

 更新時(shí)間:2025年07月07日 09:16:18   作者:大蟲(chóng)小囈  
openpyxl?和?pandas在處理Excel數(shù)據(jù)時(shí)各有優(yōu)勢(shì),選擇需結(jié)合具體場(chǎng)景,本文將從核心功能,性能,適用場(chǎng)景展等幾個(gè)不同的維度做個(gè)對(duì)比,感興趣的可以了解下

前言

雖然我的編程母語(yǔ)是 javascript,但是經(jīng)常會(huì)使用python來(lái)處理各種格式的數(shù)據(jù)文件(如.txt、.json、.xlsx .csv、.sav等等)。當(dāng)然處理得最多的還是Excel文件。為啥用python?好用??!有各種開(kāi)箱即用的工具庫(kù),如 pandasopenpyxl 這倆個(gè)好哥們都是我的碼中???。

pandas 和 openpyxl 哪家強(qiáng)?

openpyxl 和 pandas 各有優(yōu)勢(shì),選擇需結(jié)合具體場(chǎng)景(如數(shù)據(jù)規(guī)模、操作類(lèi)型、性能需求)。下面我們先從核心功能、性能、適用場(chǎng)景展等幾個(gè)不同的維度做個(gè)對(duì)比。

一、openpyxl 與 pandas 核心對(duì)比

維度openpyxlpandas
核心定位Excel 文件底層操作(格式、樣式、公式、圖表)數(shù)據(jù)分析與批量處理(清洗、聚合、透視表)
數(shù)據(jù)處理能力基礎(chǔ)讀寫(xiě),無(wú)內(nèi)置分析函數(shù)強(qiáng)大(篩選、聚合、時(shí)間序列分析等)
性能表現(xiàn)小文件讀取更快;增量模式(read_only=True)節(jié)省內(nèi)存大數(shù)據(jù)分析快(向量化計(jì)算);全加載內(nèi)存,大文件易崩潰
格式支持僅支持 .xlsx/.xlsm 等新格式支持 Excel、CSV、JSON 等
樣式/圖表精細(xì)控制(字體、顏色、圖表、條件格式)需依賴(lài) openpyxl 引擎輔助實(shí)現(xiàn)

性能測(cè)試數(shù)據(jù)(10,000行數(shù)據(jù)集):

  • 數(shù)據(jù)篩選:pandas 快 10 倍以上(0.02秒 vs 0.25秒)
  • 數(shù)據(jù)聚合:pandas 快 50 倍(0.01秒 vs 0.5秒)
  • 大文件讀取:openpyxl 增量模式內(nèi)存占用低 60%

二、其他 Excel 處理工具推薦

除 openpyxl 和 pandas 外,以下工具可以滿足其他不同場(chǎng)景的需求:

工具核心優(yōu)勢(shì)適用場(chǎng)景
xlwings雙向交互 Excel VBA,實(shí)時(shí)更新數(shù)據(jù)自動(dòng)化報(bào)表(Python 計(jì)算 → Excel 動(dòng)態(tài)展示)
xlsxwriter專(zhuān)注寫(xiě)入,支持高級(jí)格式(圖表、條件格式、加密)生成復(fù)雜格式報(bào)告(如帶動(dòng)態(tài)圖表的儀表盤(pán))
xlrd/xlwt兼容舊版 .xls 格式 (xlrd 讀取,xlwt 寫(xiě)入)處理 Excel 2003 及更早版本文件
Tablib輕量級(jí)多格式轉(zhuǎn)換(Excel/CSV/JSON 互轉(zhuǎn))快速導(dǎo)出數(shù)據(jù),無(wú)需復(fù)雜分析

三、如何選擇工具

可根據(jù)下圖決策:

四、混合使用策略(推薦場(chǎng)景)

結(jié)合兩者優(yōu)勢(shì)可讓效率最大化:

# 示例:openpyxl讀取 → pandas處理 → openpyxl美化輸出
from openpyxl import load_workbook
import pandas as pd

# 1. openpyxl增量讀取大文件
wb = load_workbook("large_file.xlsx", read_only=True)
data = [row for row in wb.active.values][1:]  # 跳過(guò)標(biāo)題
wb.close()

# 2. pandas處理數(shù)據(jù)
df = pd.DataFrame(data, columns=["Name", "Age"])
df_filtered = df[df["Age"] > 30].groupby("Name").mean()

# 3. openpyxl輸出帶樣式
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
    df_filtered.to_excel(writer, sheet_name="Summary")
    workbook = writer.book
    worksheet = writer.sheets["Summary"]
    # 設(shè)置標(biāo)題樣式
    for cell in worksheet[1]:
        cell.font = Font(bold=True, color="FFFFFF")
        cell.fill = PatternFill(start_color="366092", fill_type="solid")

方法補(bǔ)充

Python操作Excel的多種方式Pandas+openpyxl+xlrd

Pandas

pip install pandas

使用pandas操作Excel文件主要涉及讀?。?code>read_excel)和寫(xiě)入(to_excel)兩個(gè)主要操作。

讀取Excel文件(read_excel

pandasread_excel函數(shù)用于讀取Excel文件(.xls.xlsx),并將其內(nèi)容加載到DataFrame對(duì)象中。

語(yǔ)法參數(shù)

  • io: 文件路徑或文件對(duì)象。
  • sheet_name: 指定要讀取的工作表名稱(chēng)或索引。可以是字符串、整數(shù)、字符串列表或None。如果是None,則返回字典,其中包含所有工作表。
  • header: 指定作為列名的行,默認(rèn)為0(第一行)。如果文件沒(méi)有列標(biāo)題,可以設(shè)置為None。
  • names: 用于結(jié)果的列名的列表,如果文件不包含列標(biāo)題行,應(yīng)該明確指定此參數(shù)。
  • index_col: 用作行索引的列編號(hào)或列名,可以是整數(shù)、字符串、整數(shù)列表、字符串列表或False(默認(rèn))。
  • usecols: 返回列的列號(hào)或列名列表。
  • dtype: 數(shù)據(jù)或字典,用于強(qiáng)制指定某些列的數(shù)據(jù)類(lèi)型。
  • engine: 用于讀取Excel文件的引擎。None將嘗試使用io的擴(kuò)展名來(lái)選擇引擎。如果安裝了xlrd,則.xls文件將使用它;否則,將使用openpyxlodfpy(對(duì)于.ods文件)。

案例:

import pandas as pd  
  
# 讀取Excel文件  
df = pd.read_excel('example.xlsx', sheet_name='Sheet1', header=0, index_col=None, usecols=None, dtype=None)  
  
# 顯示前幾行數(shù)據(jù)  
print(df.head())  
  
# 如果文件沒(méi)有列標(biāo)題  
df_no_header = pd.read_excel('example_no_header.xlsx', header=None, names=['Column1', 'Column2', 'Column3'])  
print(df_no_header.head())  
  
# 讀取多個(gè)工作表  
xls = pd.ExcelFile('example.xlsx')  
df1 = pd.read_excel(xls, 'Sheet1')  
df2 = pd.read_excel(xls, 'Sheet2')  
# 或者  
dfs = pd.read_excel(xls, sheet_name=None)  # 返回一個(gè)字典,鍵為工作表名,值為DataFrame

進(jìn)階案例:讀取特定單元格范圍

雖然read_excel沒(méi)有直接讀取特定單元格范圍的參數(shù),但你可以通過(guò)usecols和行切片來(lái)實(shí)現(xiàn)類(lèi)似的效果。

# 假設(shè)我們只想讀取'A'列和'C'列的前兩行  
df = pd.read_excel('example.xlsx', usecols=['A', 'C']).head(2)

寫(xiě)入Excel文件(to_excel

DataFrameto_excel方法用于將DataFrame寫(xiě)入Excel文件。

語(yǔ)法參數(shù)

  • excel_writer: 文件路徑或ExcelWriter對(duì)象。
  • sheet_name: 字符串,默認(rèn)為'Sheet1'。
  • columns: 要寫(xiě)入的列名列表。
  • header: 是否寫(xiě)入列名作為Excel文件的第一行,默認(rèn)為T(mén)rue。
  • index: 是否將行索引寫(xiě)入Excel文件,默認(rèn)為T(mén)rue。
  • startrowstartcol: 左上角單元格的行號(hào)和列號(hào),用于開(kāi)始寫(xiě)入,默認(rèn)為0。
  • engine: 用于寫(xiě)入Excel文件的引擎,默認(rèn)為None(將嘗試使用openpyxlxlsxwriter)。

案例

# 創(chuàng)建一個(gè)簡(jiǎn)單的DataFrame  
df = pd.DataFrame({  
    'A': [1, 2, 3, 4],  
    'B': ['foo', 'bar', 'baz', 'qux'],  
    'C': [1.0, 2.1, 3.2, 4.3]  
})  
  
# 寫(xiě)入Excel文件  
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False, header=True)  
  
# 如果要寫(xiě)入多個(gè)工作表  
with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:  
    df.to_excel(writer, sheet_name='Sheet1', index=False)  
    df.to_excel(writer, sheet_name='Sheet2', index=False, startrow=10)  # 從第11行開(kāi)始寫(xiě)入

進(jìn)階案例:寫(xiě)入帶有樣式的Excel

為了寫(xiě)入帶有樣式的Excel文件,你需要使用ExcelWriterxlsxwriteropenpyxl引擎(取決于你的需求)。

# 使用xlsxwriter引擎寫(xiě)入帶有樣式的Excel  
with pd.ExcelWriter('styled_output.xlsx', engine='xlsxwriter') as writer:  
    df.to_excel(writer, sheet_name='Sheet1', index=False)  
    workbook = writer.book  
    worksheet = writer.sheets['Sheet1']  
      
    # 創(chuàng)建一個(gè)格式對(duì)象  
    format = workbook.add_format({'bold': True, 'font_color': 'red'})  
      
    # 應(yīng)用格式到特定單元格  
    worksheet.write('A1', 'Styled Cell', format)

注意:xlsxwriter引擎在寫(xiě)入時(shí)不支持直接修改已存在的DataFrame內(nèi)容(如通過(guò)DataFrame.style),它主要用于在寫(xiě)入時(shí)添加額外的樣式或格式。如果你需要復(fù)雜的樣式處理,可能需要結(jié)合使用pandasopenpyxl(或xlsxwriter)的高級(jí)功能。

openpyxl

openpyxl 是一個(gè)用于讀寫(xiě) Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 庫(kù)。它提供了豐富的接口來(lái)操作 Excel 文件,包括讀取、修改和寫(xiě)入數(shù)據(jù),以及設(shè)置樣式等。下面我將詳細(xì)解釋如何使用 openpyxl 操作 Excel,并給出案例代碼和進(jìn)階案例。

安裝 openpyxl

首先,確保你已經(jīng)安裝了 openpyxl。如果還沒(méi)有安裝,可以通過(guò) pip 安裝:

pip install openpyxl

基本操作

1.加載工作簿

使用 openpyxl.load_workbook() 函數(shù)加載一個(gè)現(xiàn)有的 Excel 文件。

from openpyxl import load_workbook  
  
wb = load_workbook(filename='example.xlsx')

2.激活工作表

通過(guò)工作簿對(duì)象獲取工作表。你可以通過(guò)工作表名稱(chēng)或索引來(lái)訪問(wèn)特定的工作表。

# 通過(guò)名稱(chēng)  
ws = wb['Sheet1']  
  
# 或者通過(guò)索引(索引從0開(kāi)始)  
ws = wb.worksheets[0]  
  
# 也可以使用 active 屬性獲取當(dāng)前活動(dòng)的工作表  
ws = wb.active

3.讀取數(shù)據(jù)

你可以通過(guò)單元格的坐標(biāo)來(lái)讀取數(shù)據(jù)。

# 讀取單元格的值  
cell_value = ws['A1'].value  
print(cell_value)  
  
# 遍歷行  
for row in ws.iter_rows(values_only=True):  
    print(row)  
  
# 遍歷列  
for col in ws.iter_cols(values_only=True):  
    for value in col:  
        print(value)

4.寫(xiě)入數(shù)據(jù)

你可以直接給單元格賦值來(lái)寫(xiě)入數(shù)據(jù)。

# 寫(xiě)入數(shù)據(jù)  
ws['B2'] = 'Hello, openpyxl!'  
  
# 保存修改  
wb.save('modified_example.xlsx')

語(yǔ)法參數(shù)詳解

由于 openpyxl 的功能非常廣泛,這里只列舉一些常用函數(shù)和方法的參數(shù)。

  • load_workbook(filename, read_only=False, data_only=False, keep_vba=True, ...)
    • filename: Excel 文件路徑。
    • read_only: 是否以只讀模式打開(kāi)文件。
    • data_only: 是否只讀取單元格的值,忽略公式(默認(rèn)為 False)。
    • keep_vba: 是否保留 VBA 內(nèi)容(默認(rèn)為 True)。
  • Worksheet.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False, ...)
    • min_row, max_row, min_col, max_col: 指定迭代的行或列的范圍。
    • values_only: 是否只迭代單元格的值(默認(rèn)為 False,迭代單元格對(duì)象)。
  • Worksheet.iter_cols(...)iter_rows 類(lèi)似,但用于列迭代。

案例代碼

讀取并修改 Excel

from openpyxl import load_workbook  
  
# 加載工作簿  
wb = load_workbook('example.xlsx')  
  
# 激活工作表  
ws = wb.active  
  
# 讀取單元格數(shù)據(jù)  
print(ws['A1'].value)  
  
# 修改單元格數(shù)據(jù)  
ws['B2'] = 'New Value'  
  
# 保存修改后的工作簿  
wb.save('modified_example.xlsx')

進(jìn)階案例

設(shè)置樣式

from openpyxl import Workbook  
from openpyxl.styles import Font, Color, Alignment, Border, Side  
  
# 創(chuàng)建一個(gè)新的工作簿和工作表  
wb = Workbook()  
ws = wb.active  
  
# 創(chuàng)建一個(gè)字體對(duì)象  
font = Font(name='Calibri', size=11, bold=True, italic=False, vertAlign=None,  
            underline='none', strike=False, color='FF0000')  
  
# 創(chuàng)建一個(gè)對(duì)齊對(duì)象  
alignment = Alignment(horizontal='general', vertical='bottom',  
                      text_rotation=0, wrap_text=False,  
                      shrink_to_fit=False, indent=0)  
  
# 創(chuàng)建一個(gè)邊框?qū)ο? 
thin = Side(border_style="thin", color="000000")  
border = Border(top=thin, left=thin, right=thin, bottom=thin)  
  
# 應(yīng)用樣式到單元格  
ws['A1'].font = font  
ws['A1'].alignment = alignment  
ws['A1'].border = border  
ws['A1'] = 'Styled Cell'  
  
# 保存工作簿  
wb.save('styled_workbook.xlsx')

在進(jìn)階案例中,我們展示了如何創(chuàng)建字體、對(duì)齊和邊框樣式,并將它們應(yīng)用到單元格上。openpyxl 提供了豐富的樣式選項(xiàng),可以滿足大多數(shù) Excel 樣式設(shè)置的需求。

xlrd

xlrd 是一個(gè)用于讀取 Excel 文件(主要是 .xls.xlsx 格式,盡管對(duì) .xlsx 的支持可能不如 openpyxl 全面)的 Python 庫(kù)。然而,需要注意的是,從版本 2.0.0 開(kāi)始,xlrd 僅支持 .xls 格式的文件,不再支持 .xlsx。對(duì)于 .xlsx 文件,推薦使用 openpyxlpandas(后者底層可以調(diào)用 openpyxl)。

安裝 xlrd

首先,確保你已經(jīng)安裝了 xlrd。如果還沒(méi)有安裝,可以通過(guò) pip 安裝:

pip install xlrd==1.2.0  # 最好選擇一個(gè)支持.xlsx的舊版本

基本操作

加載工作簿

使用 xlrd.open_workbook() 函數(shù)加載 Excel 文件。

import xlrd  
  
# 加載工作簿  
workbook = xlrd.open_workbook('example.xls')

訪問(wèn)工作表

通過(guò)索引或名稱(chēng)訪問(wèn)工作表。

# 通過(guò)索引訪問(wèn)(索引從0開(kāi)始)  
sheet = workbook.sheet_by_index(0)  
  
# 或者通過(guò)名稱(chēng)訪問(wèn)  
sheet = workbook.sheet_by_name('Sheet1')

讀取數(shù)據(jù)

使用行號(hào)(從0開(kāi)始)和列號(hào)(也從0開(kāi)始)或單元格名稱(chēng)(如 'A1')來(lái)讀取數(shù)據(jù)。

# 通過(guò)行號(hào)和列號(hào)讀取  
cell_value = sheet.cell_value(0, 0)  # 讀取第一行第一列的數(shù)據(jù)  
print(cell_value)  
  
# 或者使用 cell 方法(返回單元格對(duì)象,然后可以調(diào)用 value 屬性)  
cell = sheet.cell(0, 0)  
print(cell.value)  
  
# 通過(guò)單元格名稱(chēng)讀取(需要安裝xlutils或類(lèi)似庫(kù)來(lái)轉(zhuǎn)換A1表示法)  
# 注意:xlrd本身不直接支持A1表示法,這里僅作為說(shuō)明  
# 通常,你會(huì)通過(guò)計(jì)算行號(hào)和列號(hào)來(lái)訪問(wèn)單元格

語(yǔ)法參數(shù)詳解

由于 xlrd 的 API 相對(duì)簡(jiǎn)單,這里主要關(guān)注 open_workbook()sheet_by_...() 方法的參數(shù)。

  • xlrd.open_workbook(filename=None, ...)
    • filename: Excel 文件路徑。
    • 其他參數(shù)(如 on_demand、formatting_info 等)在較新版本的 xlrd 中可能不再支持或用途有限,特別是針對(duì) .xlsx 文件的處理。
  • workbook.sheet_by_index(sheetx)workbook.sheet_by_name(sheet_name)
    • sheetx: 工作表的索引(整數(shù))。
    • sheet_name: 工作表的名稱(chēng)(字符串)。

案例代碼

讀取 Excel 文件中的數(shù)據(jù)

import xlrd  
  
# 加載工作簿  
workbook = xlrd.open_workbook('example.xls')  
  
# 通過(guò)名稱(chēng)訪問(wèn)工作表  
sheet = workbook.sheet_by_name('Sheet1')  
  
# 讀取并打印第一行和第一列的數(shù)據(jù)  
print(sheet.cell_value(0, 0))  
  
# 遍歷所有行和列  
for row_idx in range(sheet.nrows):  
    for col_idx in range(sheet.ncols):  
        print(sheet.cell_value(row_idx, col_idx), end='\t')  
    print()  # 換行

總結(jié)建議

  • 選 openpyxl:精確控制格式/公式/圖表(如財(cái)務(wù)報(bào)表模板)。
  • 選 pandas:需數(shù)據(jù)清洗、統(tǒng)計(jì)或跨格式分析(如銷(xiāo)售數(shù)據(jù)透視)。
  • 選其他工具
    • 交互式報(bào)表 → xlwings
    • 舊版文件 → xlrd/xlwt
    • 高級(jí)寫(xiě)入 → xlsxwriter
  • 混合方案:大文件或“分析+美化”場(chǎng)景的首選。

最終決策應(yīng)結(jié)合數(shù)據(jù)規(guī)模、操作類(lèi)型及輸出需求。靈活組合工具可最大化效率 。

以上就是Python中處理Excel數(shù)據(jù)的方法對(duì)比(pandas和openpyxl)的詳細(xì)內(nèi)容,更多關(guān)于Python處理Excel數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

包头市| 阿克苏市| 安吉县| 汕尾市| 沾益县| 夹江县| 桑日县| 嘉兴市| 东乌| 北辰区| 青龙| 清丰县| 治多县| 美姑县| 博爱县| 新巴尔虎右旗| 米易县| 铜鼓县| 延长县| 上饶县| 连云港市| 鄢陵县| 北安市| 丽水市| 昭觉县| 武宣县| 项城市| 五大连池市| 澄迈县| 万宁市| 黎城县| 保定市| 敖汉旗| 罗田县| 永昌县| 慈利县| 东安县| 陇南市| 黄大仙区| 突泉县| 鸡东县|