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

Python實現(xiàn)精準拆分Excel文件大表數(shù)據(jù)功能

 更新時間:2026年06月23日 08:42:06   作者:小莊-Python辦公  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)精準拆分Excel文件大表數(shù)據(jù)功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Python精準拆分——按城市/部門將總表數(shù)據(jù)秒拆成獨立文件

場景引入

上一節(jié)我們學(xué)會了把上百份 Excel 合并成一張總表,但現(xiàn)實工作中,經(jīng)常需要反其道而行之:

行政部收到了一份全公司 2000 名員工的年度花名冊(一張大表),領(lǐng)導(dǎo)要求按部門拆分成獨立文件,分別發(fā)給各部門負責人核對。手動篩選→復(fù)制→粘貼→保存,12 個部門做下來至少要半小時,還容易出錯。

本節(jié)將教你如何用 Python 的 分組功能,10 行代碼實現(xiàn)一鍵拆分,3 秒搞定。

技術(shù)原理

核心流程:

總表.xlsx(2000行數(shù)據(jù))
    ↓
按"部門"列分組:groupby("部門")
    ↓
每個部門一個 DataFrame
    ↓
分別導(dǎo)出為獨立 Excel 文件
    ↓
輸出/
├── 人力資源部.xlsx
├── 財務(wù)部.xlsx
├── 技術(shù)部.xlsx
└── ...

關(guān)鍵技術(shù)點:

  1. groupby():pandas 的分組函數(shù),按指定列的值將數(shù)據(jù)分成若干組
  2. 循環(huán)導(dǎo)出:遍歷每個分組,調(diào)用 to_excel() 分別保存

環(huán)境準備

pip install pandas openpyxl

完整代碼

import os
import pandas as pd

def split_excel_by_column(input_file, split_column, output_dir="拆分結(jié)果"):
    """
    按指定列的值將 Excel 總表拆分為多個獨立文件

    參數(shù):
        input_file: 輸入的總表 Excel 文件路徑
        split_column: 用于拆分的列名(如"部門"、"城市")
        output_dir: 輸出文件夾路徑
    """
    # 1. 讀取總表
    if not os.path.exists(input_file):
        print(f"錯誤:文件 {input_file} 不存在!")
        return

    df = pd.read_excel(input_file, engine='openpyxl')
    print(f"總表數(shù)據(jù):{len(df)} 行,{len(df.columns)} 列")

    # 2. 檢查拆分列是否存在
    if split_column not in df.columns:
        print(f"錯誤:列名 '{split_column}' 不存在!可用列:{list(df.columns)}")
        return

    # 3. 創(chuàng)建輸出目錄
    os.makedirs(output_dir, exist_ok=True)

    # 4. 按指定列分組并導(dǎo)出
    grouped = df.groupby(split_column)
    group_count = 0

    for group_name, group_df in grouped:
        # 清理文件名中的非法字符(Windows 文件名不允許的字符)
        safe_name = str(group_name).replace('/', '_').replace('\\', '_')
        safe_name = safe_name.replace('*', '').replace('?', '').replace(':', '')

        output_file = os.path.join(output_dir, f"{safe_name}.xlsx")
        group_df.to_excel(output_file, index=False, engine='openpyxl')
        group_count += 1
        print(f"[{group_count}] 已拆分: {safe_name} ({len(group_df)} 行)")

    print(f"\n拆分完成!共生成 {group_count} 個文件,保存在: {output_dir}/")


# ==================== 使用示例 ====================
if __name__ == "__main__":
    # ========== 示例 1:按部門拆分 ==========
    split_excel_by_column(
        input_file="員工花名冊總表.xlsx",
        split_column="部門",
        output_dir="按部門拆分"
    )

    # ========== 示例 2:按城市拆分 ==========
    # split_excel_by_column(
    #     input_file="銷售數(shù)據(jù)總表.xlsx",
    #     split_column="城市",
    #     output_dir="按城市拆分"
    # )

代碼逐行解析

1. 讀取總表

df = pd.read_excel(input_file, engine='openpyxl')

將 Excel 文件加載為 DataFrame,后續(xù)所有操作都基于這個數(shù)據(jù)結(jié)構(gòu)。

2. 驗證列名

if split_column not in df.columns:
    print(f"錯誤:列名 '{split_column}' 不存在!可用列:{list(df.columns)}")
    return

防止用戶輸入了錯誤的列名。df.columns 返回所有列名的列表。

3. 核心:groupby 分組

grouped = df.groupby(split_column)

groupby() 是 pandas 最強大的函數(shù)之一。它按照指定列的值將數(shù)據(jù)分成若干組:

部門姓名工資
技術(shù)部張三15000
財務(wù)部李四12000
技術(shù)部王五16000
人事部趙六11000

按"部門"分組后得到 3 組:

  • 技術(shù)部:張三、王五
  • 財務(wù)部:李四
  • 人事部:趙六

4. 遍歷分組并導(dǎo)出

for group_name, group_df in grouped:
    output_file = os.path.join(output_dir, f"{group_name}.xlsx")
    group_df.to_excel(output_file, index=False, engine='openpyxl')

每次循環(huán):

  • group_name:分組值(如"技術(shù)部")
  • group_df:該分組對應(yīng)的 DataFrame(只包含該部門的數(shù)據(jù))
  • 導(dǎo)出為獨立 Excel 文件

5. 文件名安全處理

safe_name = str(group_name).replace('/', '_').replace('\\', '_')

Windows 文件名中不能包含以下字符:\ / : * ? " < > |,所以需要做替換處理。

進階技巧

技巧 1:按多列組合拆分

比如按"部門"+"城市"兩個維度同時拆分,文件名體現(xiàn)兩個維度:

df['拆分鍵'] = df['部門'] + '_' + df['城市']
grouped = df.groupby('拆分鍵')

效果:

  • 技術(shù)部_北京.xlsx
  • 技術(shù)部_上海.xlsx
  • 財務(wù)部_北京.xlsx

技巧 2:拆分時只保留特定列

for group_name, group_df in grouped:
    # 只保留需要的列
    keep_columns = ['姓名', '工號', '郵箱', '電話']
    existing_columns = [col for col in keep_columns if col in group_df.columns]
    group_df[existing_columns].to_excel(output_file, index=False, engine='openpyxl')

技巧 3:拆分后自動壓縮打包

import shutil

# 拆分完成后打包為 ZIP
shutil.make_archive("拆分結(jié)果", 'zip', output_dir)
print("已打包為 拆分結(jié)果.zip")

技巧 4:按數(shù)值區(qū)間拆分

不是按列的值拆分,而是按數(shù)值范圍(如按工資區(qū)間拆分):

# 定義工資區(qū)間
conditions = [
    (df['工資'] < 8000),
    (df['工資'] >= 8000) & (df['工資'] < 15000),
    (df['工資'] >= 15000)
]
choices = ['初級', '中級', '高級']
df['工資等級'] = pd.cut(df['工資'], bins=[0, 8000, 15000, float('inf')], labels=['初級', '中級', '高級'])
grouped = df.groupby('工資等級')

常見問題

Q1:拆分后文件數(shù)量不對,比預(yù)期的少?

原因:某些分類值完全相同(比如有全角/半角空格差異),被合并為一組。

排查

print(df['部門'].unique())  # 查看唯一的部門值
print(df['部門'].value_counts())  # 查看每個部門的行數(shù)

Q2:拆分出來的文件打不開?

檢查文件名中是否含有 Windows 不允許的字符(/ \ : * ? " < > |)。代碼中已做基本處理,但如果分類值含有其他特殊字符,可能需要額外處理。

Q3:想保留原始表格的格式(列寬、字體等)怎么辦?

pandas 導(dǎo)出時不保留格式。如需保留格式,可以使用 openpyxl 庫手動設(shè)置:

from openpyxl import load_workbook

# 先復(fù)制模板
import shutil
shutil.copy("模板.xlsx", output_file)

# 再寫入數(shù)據(jù)
wb = load_workbook(output_file)
ws = wb.active
for row_idx, row in enumerate(group_df.values, start=2):
    for col_idx, value in enumerate(row, start=1):
        ws.cell(row=row_idx, column=col_idx, value=value)
wb.save(output_file)

總結(jié)

核心函數(shù)作用示例
groupby(列名)按列值分組df.groupby("部門")
to_excel()導(dǎo)出為 Excelgroup_df.to_excel("技術(shù)部.xlsx")
os.makedirs()創(chuàng)建輸出目錄os.makedirs("拆分結(jié)果")

本節(jié)學(xué)會了 pandas 的 分組拆分 技能,與上一節(jié)的"合并"形成完整的數(shù)據(jù)整理閉環(huán)。實際工作中,合并→清洗→拆分,這三個操作覆蓋了 80% 的 Excel 批量處理場景。

到此這篇關(guān)于Python實現(xiàn)精準拆分Excel文件大表數(shù)據(jù)功能的文章就介紹到這了,更多相關(guān)Python拆分Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從基礎(chǔ)到進階詳解Python字符串拼接的6種方法

    從基礎(chǔ)到進階詳解Python字符串拼接的6種方法

    字符串拼接是編程中最基礎(chǔ)的操作之一,本文將通過實際代碼示例和性能測試,帶你全面了解Python中字符串拼接的6種方法,希望對大家有所幫助
    2026-02-02
  • Matplotlib中文亂碼的兩種詳細解決方案

    Matplotlib中文亂碼的兩種詳細解決方案

    最近手頭有公司的數(shù)據(jù)資源,正好拿來練習(xí)了matplotlib的畫圖,期間碰到一個坑,就是中文在圖表中顯示的是方框,下面這篇文章主要給大家介紹了關(guān)于Matplotlib中文亂碼的兩種詳細解決方案,需要的朋友可以參考下
    2022-07-07
  • Python 實現(xiàn)一行輸入多個值的方法

    Python 實現(xiàn)一行輸入多個值的方法

    下面小編就為大家分享一篇Python 實現(xiàn)一行輸入多個值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python實現(xiàn)一個簡單的MySQL類

    Python實現(xiàn)一個簡單的MySQL類

    這篇文章主要介紹了Python實現(xiàn)一個簡單的MySQL類,可實現(xiàn)基本的初始化連接及查詢、刪除等功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • python selenium對應(yīng)的瀏覽器chromedriver版本不一致問題

    python selenium對應(yīng)的瀏覽器chromedriver版本不一致問題

    這篇文章主要介紹了python selenium對應(yīng)的瀏覽器chromedriver版本不一致問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 教你如何編寫、保存與運行Python程序的方法

    教你如何編寫、保存與運行Python程序的方法

    這篇文章主要介紹了教你如何編寫、保存與運行Python程序的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 一步步教你用python代碼畫一幅星空

    一步步教你用python代碼畫一幅星空

    這篇文章主要給大家介紹了關(guān)于如何使用python代碼畫一幅星空的相關(guān)資料,Python是一種非常流行的編程語言,它可以用來創(chuàng)建許多有趣的項目,例如繪制星空,需要的朋友可以參考下
    2023-09-09
  • Python基礎(chǔ)中所出現(xiàn)的異常報錯總結(jié)

    Python基礎(chǔ)中所出現(xiàn)的異常報錯總結(jié)

    本篇文章介紹了Python基礎(chǔ)中所出現(xiàn)的異常報錯總結(jié),這是Python日常所常見的錯誤,現(xiàn)在總結(jié)出來給大家。
    2016-11-11
  • 解決Python plt.savefig 保存圖片時一片空白的問題

    解決Python plt.savefig 保存圖片時一片空白的問題

    今天小編就為大家分享一篇解決Python plt.savefig 保存圖片時一片空白的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫的方法

    Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫的方法

    這篇文章主要介紹了Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論

晋州市| 高唐县| 日土县| 乐昌市| 通海县| 建德市| 汉寿县| 合肥市| 宁波市| 呼伦贝尔市| 万盛区| 彭水| 南投市| 元阳县| 商河县| 湘乡市| 石楼县| 华坪县| 荔波县| 德庆县| 无极县| 平远县| 海淀区| 琼结县| 镇江市| 拉孜县| 喀什市| 资源县| 博湖县| 永济市| 彭山县| 秦安县| 长岛县| 延边| 手游| 鹰潭市| 湟中县| 东台市| 东乡族自治县| 浠水县| 焦作市|