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

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

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

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

場(chǎng)景引入

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

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

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

技術(shù)原理

核心流程:

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

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

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

環(huán)境準(zhǔn)備

pip install pandas openpyxl

完整代碼

import os
import pandas as pd

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

    參數(shù):
        input_file: 輸入的總表 Excel 文件路徑
        split_column: 用于拆分的列名(如"部門(mén)"、"城市")
        output_dir: 輸出文件夾路徑
    """
    # 1. 讀取總表
    if not os.path.exists(input_file):
        print(f"錯(cuò)誤:文件 {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"錯(cuò)誤:列名 '{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} 個(gè)文件,保存在: {output_dir}/")


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

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

代碼逐行解析

1. 讀取總表

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

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

2. 驗(yàn)證列名

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

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

3. 核心:groupby 分組

grouped = df.groupby(split_column)

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

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

按"部門(mén)"分組后得到 3 組:

  • 技術(shù)部:張三、王五
  • 財(cái)務(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:該分組對(duì)應(yīng)的 DataFrame(只包含該部門(mén)的數(shù)據(jù))
  • 導(dǎo)出為獨(dú)立 Excel 文件

5. 文件名安全處理

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

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

進(jìn)階技巧

技巧 1:按多列組合拆分

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

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

效果:

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

技巧 2:拆分時(shí)只保留特定列

for group_name, group_df in grouped:
    # 只保留需要的列
    keep_columns = ['姓名', '工號(hào)', '郵箱', '電話']
    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:拆分后自動(dòng)壓縮打包

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 = ['初級(jí)', '中級(jí)', '高級(jí)']
df['工資等級(jí)'] = pd.cut(df['工資'], bins=[0, 8000, 15000, float('inf')], labels=['初級(jí)', '中級(jí)', '高級(jí)'])
grouped = df.groupby('工資等級(jí)')

常見(jiàn)問(wèn)題

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

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

排查

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

Q2:拆分出來(lái)的文件打不開(kāi)?

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

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

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

from openpyxl import load_workbook

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

# 再寫(xiě)入數(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("部門(mén)")
to_excel()導(dǎo)出為 Excelgroup_df.to_excel("技術(shù)部.xlsx")
os.makedirs()創(chuàng)建輸出目錄os.makedirs("拆分結(jié)果")

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

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

相關(guān)文章

最新評(píng)論

兰考县| 绵竹市| 江都市| 老河口市| 阳城县| 峨眉山市| 娄底市| 金寨县| 安康市| 肥东县| 桐梓县| 启东市| 德化县| 恩平市| 清新县| 东台市| 长乐市| 清镇市| 郧西县| 阿拉善右旗| 北票市| 丰台区| 重庆市| 隆尧县| 瑞丽市| 石阡县| 沂南县| 房产| 沙田区| 明星| 古田县| 岱山县| 桂林市| 郴州市| 麦盖提县| 柯坪县| 江门市| 禄丰县| 六安市| 茶陵县| 剑川县|