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

Python?pandas批量處理Excel數(shù)據(jù)透視表

 更新時(shí)間:2026年07月29日 08:51:31   作者:張老師技術(shù)棧  
數(shù)據(jù)透視表是?Excel?最常用的分析工具,本文會(huì)使用pandas的pivot_table函數(shù),一行代碼生成透視表并且支持多級透視和多個(gè)統(tǒng)計(jì)值,讓你的數(shù)據(jù)分析效率翻倍

數(shù)據(jù)透視表是 Excel 最常用的分析工具。pandas 的 pivot_table 一行代碼生成。

一、讀取與透視

import pandas as pd

df = pd.read_excel("銷售數(shù)據(jù).xlsx")

pivot = pd.pivot_table(
    df,
    values="銷售額",
    index="城市",
    columns="品類",
    aggfunc="sum",
    fill_value=0,
    margins=True,
    margins_name="合計(jì)"
)

二、多級透視

pivot = pd.pivot_table(
    df,
    values="銷售額",
    index=["城市", "銷售員"],
    columns="季度",
    aggfunc=["sum", "mean"]
)

三、多個(gè)統(tǒng)計(jì)值

pivot = pd.pivot_table(
    df,
    values="銷售額",
    index="城市",
    aggfunc={"銷售額": ["sum", "mean", "count", "max"]}
)

四、知識(shí)擴(kuò)展

使用Pandas處理Excel數(shù)據(jù)透視表,核心思路是用 pivot_table 函數(shù)將手工拖拽的“規(guī)則”轉(zhuǎn)化為可復(fù)用的代碼。

準(zhǔn)備工作:安裝與導(dǎo)入

在開始前,請確保已安裝Pandas和Excel讀寫引擎。

pip install pandas openpyxl

在Python腳本中導(dǎo)入庫:

import pandas as pd
import glob
import os

核心:pandas的 pivot_table 函數(shù)

Pandas的 pivot_table 函數(shù)是生成數(shù)據(jù)透視表的核心。它與Excel透視表的對應(yīng)關(guān)系如下:

Excel 透視表區(qū)域pandas pivot_table 參數(shù)說明
index作為行標(biāo)簽的列,可以是單列或多列。
columns作為列標(biāo)簽的列。
values需要進(jìn)行聚合計(jì)算的數(shù)值列。
計(jì)算方式aggfunc聚合函數(shù),如 'sum'(求和), 'mean'(平均), 'count'(計(jì)數(shù))。
總計(jì)marginsTrue 或 False,是否顯示總計(jì)行/列。
總計(jì)名稱margins_name自定義總計(jì)行/列的標(biāo)簽,默認(rèn)為 'All'。
空值填充fill_value將透視表中的空值替換為指定值。

實(shí)戰(zhàn)場景:批量處理

場景一:合并多個(gè)Excel文件后生成透視表

當(dāng)數(shù)據(jù)分散在多個(gè)結(jié)構(gòu)相同的Excel文件中時(shí),可以先將它們合并,再生成透視表。

import pandas as pd
import glob
# 1. 獲取所有Excel文件路徑
file_paths = glob.glob('銷售數(shù)據(jù)_*.xlsx')  # 假設(shè)所有文件都以"銷售數(shù)據(jù)_"開頭
# 2. 讀取并合并所有文件
all_data = pd.DataFrame()
for file in file_paths:
    df = pd.read_excel(file)
    all_data = pd.concat([all_data, df], ignore_index=True)
# (可選) 如果文件名包含月份信息,可以提取出來作為新列
# all_data['月份'] = all_data['文件名'].apply(lambda x: x.split('_')[1])
# 3. 生成數(shù)據(jù)透視表
pivot_table = pd.pivot_table(all_data,
                             values='銷售額',
                             index='地區(qū)',
                             columns='產(chǎn)品',
                             aggfunc='sum',
                             margins=True,
                             margins_name='總計(jì)',
                             fill_value=0)
# 4. 導(dǎo)出結(jié)果
pivot_table.to_excel('匯總透視表.xlsx')
print("透視表已生成!")

場景二:處理一個(gè)Excel文件中的多個(gè)Sheet

如果一個(gè)Excel文件包含多個(gè)結(jié)構(gòu)相同Sheet,每個(gè)Sheet代表不同維度,可將所有Sheet合并后再處理。

import pandas as pd
# 1. 讀取所有Sheet,sheet_name=None會(huì)返回一個(gè)字典
all_sheets = pd.read_excel('全年銷售數(shù)據(jù).xlsx', sheet_name=None)
# 2. 合并所有Sheet,并添加來源Sheet名作為新列
all_data = pd.DataFrame()
for sheet_name, df in all_sheets.items():
    df['月份'] = sheet_name  # 新增一列標(biāo)記數(shù)據(jù)來源
    all_data = pd.concat([all_data, df], ignore_index=True)
# 3. 生成透視表(按月份和地區(qū)匯總)
pivot_table = pd.pivot_table(all_data,
                             values='銷售額',
                             index=['月份', '地區(qū)'],
                             columns='產(chǎn)品',
                             aggfunc='sum',
                             fill_value=0,
                             margins=True,
                             margins_name='總計(jì)')
# 4. 導(dǎo)出結(jié)果
pivot_table.to_excel('月度銷售透視表.xlsx')

場景三:批量生成多個(gè)透視表并導(dǎo)出到一個(gè)Excel

如果需要生成多個(gè)不同維度的透視表,可將它們寫入同一個(gè)Excel文件的不同Sheet中,方便對比。

import pandas as pd
df = pd.read_excel('源數(shù)據(jù).xlsx')
with pd.ExcelWriter('多維度透視報(bào)告.xlsx', engine='openpyxl') as writer:
    # 1. 按地區(qū)匯總
    pivot1 = pd.pivot_table(df, values='銷售額', index='地區(qū)',
                            aggfunc='sum', margins=True, margins_name='合計(jì)')
    pivot1.to_excel(writer, sheet_name='地區(qū)匯總')
    # 2. 按產(chǎn)品匯總
    pivot2 = pd.pivot_table(df, values='銷售額', index='產(chǎn)品',
                            aggfunc='sum', margins=True, margins_name='合計(jì)')
    pivot2.to_excel(writer, sheet_name='產(chǎn)品匯總')
    # 3. 地區(qū) × 產(chǎn)品 交叉透視
    pivot3 = pd.pivot_table(df, values='銷售額', index='地區(qū)', columns='產(chǎn)品',
                            aggfunc='sum', fill_value=0, margins=True, margins_name='合計(jì)')
    pivot3.to_excel(writer, sheet_name='地區(qū)_產(chǎn)品交叉')

場景四:結(jié)合xlwings在原有Excel中生成透視表(需安裝Excel)

如果需要像Excel原生透視表一樣操作,可使用 xlwings 庫。它需要本地安裝Excel。

import pandas as pd
import xlwings as xw
def batch_pivot_in_workbook(input_xlsx, index_col, value_col, columns_col=None, aggfunc='sum'):
    """遍歷Excel中的所有工作表,生成透視表并寫入新sheet"""
    app = xw.App(visible=False)
    wb = app.books.open(input_xlsx)
    summary_sheet = wb.sheets.add('透視匯總')
    row_offset = 0
    for sheet in wb.sheets:
        if sheet.name == '透視匯總':
            continue
        # 讀取數(shù)據(jù)
        data_range = sheet.range('A1').expand('table')
        df = data_range.options(pd.DataFrame, header=1).value
        # 清洗數(shù)值列(去除貨幣符號等)[reference:16]
        df[value_col] = df[value_col].astype(str).str.replace(r'[¥¥$,]', '', regex=True)
        df[value_col] = pd.to_numeric(df[value_col], errors='coerce').fillna(0)
        # 生成透視表[reference:17]
        pivot = pd.pivot_table(df,
                               index=index_col,
                               columns=columns_col if columns_col else None,
                               values=value_col,
                               aggfunc=aggfunc,
                               fill_value=0,
                               margins=True,
                               margins_name='總計(jì)')
        # 將透視表寫入?yún)R總sheet[reference:18]
        summary_sheet.range(row_offset + 1, 1).value = f'--- {sheet.name} 的透視結(jié)果 ---'
        summary_sheet.range(row_offset + 2, 1).value = pivot
        row_offset += len(pivot) + 4  # 為下一個(gè)透視表留出空行
    wb.save()
    wb.close()
    app.quit()
    print(f"批量透視完成,結(jié)果已寫入 '透視匯總' sheet。")
# 調(diào)用函數(shù)
batch_pivot_in_workbook('數(shù)據(jù)文件.xlsx', index_col='地區(qū)', value_col='銷售額', columns_col='產(chǎn)品')

總結(jié)

pivot_table 是核心index、columns、valuesaggfunc這四個(gè)參數(shù)與Excel透視表的行、列、值和計(jì)算方式一一對應(yīng)。

批量處理三步走:批量處理通常遵循“讀取 → 合并 → 透視”的模式。

選擇合適的工具

  • 僅需計(jì)算結(jié)果,用 pandas + to_excel 即可。
  • 需要在Excel中保留原生透視表功能,可使用 xlwings。

到此這篇關(guān)于Python pandas批量處理Excel數(shù)據(jù)透視表的文章就介紹到這了,更多相關(guān)Python處理Excel數(shù)據(jù)透視表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn)

    PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • OpenCV進(jìn)階之鼠標(biāo)事件的回調(diào)函數(shù)使用方法詳解

    OpenCV進(jìn)階之鼠標(biāo)事件的回調(diào)函數(shù)使用方法詳解

    鼠標(biāo)事件的回調(diào)函數(shù)使用方法是計(jì)算機(jī)視覺領(lǐng)域的核心知識(shí)點(diǎn)之一,掌握這項(xiàng)技能對于提升視覺算法開發(fā)效率和應(yīng)用效果至關(guān)重要,本文深入講解了OpenCV中鼠標(biāo)事件回調(diào)函數(shù)的使用方法,感興趣的小伙伴可以了解下
    2026-05-05
  • Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示

    Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示

    這篇文章主要介紹了Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示,下面文章圍繞Python爬蟲的相關(guān)資料展開對爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)的詳細(xì)介紹,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • Python百度指數(shù)獲取腳本下載并保存

    Python百度指數(shù)獲取腳本下載并保存

    這篇文章主要介紹了Python百度指數(shù)獲取腳本下載并保存,基于原有的可以對百度指數(shù)進(jìn)行爬蟲的腳本做一個(gè)可直接返回pd.DataFrame的數(shù)據(jù)框的類加上可視化代碼完成,需要的朋友可以參考一下
    2022-06-06
  • python類別數(shù)據(jù)數(shù)字化LabelEncoder?VS?OneHotEncoder區(qū)別

    python類別數(shù)據(jù)數(shù)字化LabelEncoder?VS?OneHotEncoder區(qū)別

    這篇文章主要為大家介紹了機(jī)器學(xué)習(xí):數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)數(shù)字化的方法LabelEncoder?VS?OneHotEncoder區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • python UDF 實(shí)現(xiàn)對csv批量md5加密操作

    python UDF 實(shí)現(xiàn)對csv批量md5加密操作

    這篇文章主要介紹了python UDF 實(shí)現(xiàn)對csv批量md5加密操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • django 通過URL訪問上傳的文件方法

    django 通過URL訪問上傳的文件方法

    今天小編就為大家分享一篇django 通過URL訪問上傳的文件方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python+Pygame實(shí)戰(zhàn)之24點(diǎn)游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)戰(zhàn)之24點(diǎn)游戲的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python和Pygame實(shí)現(xiàn)24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python實(shí)現(xiàn)音頻添加數(shù)字水印的示例詳解

    Python實(shí)現(xiàn)音頻添加數(shù)字水印的示例詳解

    數(shù)字水印技術(shù)可以將隱藏信息嵌入到音頻文件中而不明顯影響音頻質(zhì)量,下面小編將介紹幾種在Python中實(shí)現(xiàn)音頻數(shù)字水印的方法,希望對大家有所幫助
    2025-04-04
  • 使用?OpenCV?開發(fā)虛擬鍵盤的方法

    使用?OpenCV?開發(fā)虛擬鍵盤的方法

    OpenCV是一個(gè)強(qiáng)大的圖像處理工具,用于機(jī)器學(xué)習(xí)、圖像處理等的跨平臺(tái)開源庫,用于開發(fā)實(shí)時(shí)計(jì)算機(jī)視覺應(yīng)用程序,本文重點(diǎn)給大家介紹使用?OpenCV?開發(fā)虛擬鍵盤的方法,感興趣的朋友一起看看吧
    2021-11-11

最新評論

崇信县| 沁水县| 缙云县| 迭部县| 开鲁县| 沙坪坝区| 浦城县| 平和县| 平泉县| 宁城县| 济源市| 怀来县| 福泉市| 洞口县| 吉木萨尔县| 沿河| 镇赉县| 辽阳市| 仲巴县| 蒙城县| 元谋县| 仪征市| 互助| 民丰县| 六枝特区| 南陵县| 天峨县| 拜泉县| 平乐县| 普格县| 乐清市| 边坝县| 和顺县| 桂阳县| 无极县| 平昌县| 托克逊县| 凤凰县| 新乐市| 榆中县| 宝丰县|