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

Python數(shù)據(jù)自動(dòng)化處理之?dāng)?shù)據(jù)清洗和報(bào)表生成詳解

 更新時(shí)間:2026年03月16日 09:48:34   作者:叫我輝哥e1  
這篇文章主要介紹了一個(gè)全自動(dòng)數(shù)據(jù)處理流水線的Python實(shí)現(xiàn)方案,幫助用戶解決日常數(shù)據(jù)處理痛點(diǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

前面我們已經(jīng)搞定了:看板、AI助手、郵件機(jī)器人。但還有一個(gè)超級(jí)痛點(diǎn)數(shù)據(jù)處理。

很多同學(xué)每天都要:

  • 從各個(gè)系統(tǒng)導(dǎo)出原始數(shù)據(jù)(Excel/CSV/TXT)
  • 手動(dòng)去重、補(bǔ)全缺失值、統(tǒng)一格式
  • 生成日?qǐng)?bào)/周報(bào)/月報(bào)
  • 手動(dòng)調(diào)整字體、顏色、圖表,美化報(bào)表
  • 重復(fù)同樣的操作,枯燥又容易出錯(cuò)

今天就用極簡(jiǎn)代碼,帶你實(shí)現(xiàn)一套全自動(dòng)數(shù)據(jù)處理流水線:自動(dòng)讀取原始數(shù)據(jù) → 自動(dòng)清洗 → 自動(dòng)生成報(bào)表 → 自動(dòng)美化 → 自動(dòng)保存,真正實(shí)現(xiàn)“一鍵出報(bào)表”。

一、本次你能學(xué)到什么

用 Python 自動(dòng)讀取多種格式數(shù)據(jù)(Excel/CSV)

自動(dòng)數(shù)據(jù)清洗(去重、補(bǔ)全、格式轉(zhuǎn)換、異常值處理)

自動(dòng)生成統(tǒng)計(jì)指標(biāo)(求和、平均、最大值、最小值)

自動(dòng)插入圖表(柱狀圖、折線圖、餅圖)

一鍵美化報(bào)表(字體、顏色、邊框、對(duì)齊)

做成可復(fù)用的工具,下次直接用

二、前期準(zhǔn)備(1 分鐘搞定)

1. 安裝依賴

打開命令行執(zhí)行:

pip install pandas openpyxl xlsxwriter python-dotenv

2. 準(zhǔn)備測(cè)試數(shù)據(jù)

新建一個(gè) raw_data 文件夾,放一些測(cè)試用的 Excel/CSV 文件(模擬從系統(tǒng)導(dǎo)出的原始數(shù)據(jù))。

三、核心代碼:全自動(dòng)數(shù)據(jù)處理流水線(完整可跑)

新建文件:data_processor.py

# -*- coding: utf-8 -*-
import pandas as pd
import os
from datetime import datetime
from dotenv import load_dotenv

# 加載配置
load_dotenv()

# 路徑配置
RAW_DATA_PATH = "raw_data"
OUTPUT_PATH = "processed_reports"
if not os.path.exists(OUTPUT_PATH):
    os.mkdir(OUTPUT_PATH)

# ---------------------------
# 1. 讀取原始數(shù)據(jù)
# ---------------------------
def read_raw_data(file_path):
    """自動(dòng)識(shí)別文件格式并讀取"""
    ext = os.path.splitext(file_path)[1].lower()
    if ext == ".xlsx":
        return pd.read_excel(file_path)
    elif ext == ".csv":
        return pd.read_csv(file_path)
    else:
        raise ValueError(f"不支持的文件格式:{ext}")

# ---------------------------
# 2. 自動(dòng)數(shù)據(jù)清洗
# ---------------------------
def clean_data(df):
    """
    通用數(shù)據(jù)清洗函數(shù):
    1. 去重
    2. 補(bǔ)全缺失值
    3. 格式轉(zhuǎn)換
    4. 異常值處理
    """
    # 復(fù)制一份,避免修改原數(shù)據(jù)
    df_clean = df.copy()
    
    # 1. 去重
    before_count = len(df_clean)
    df_clean = df_clean.drop_duplicates()
    after_count = len(df_clean)
    print(f"?? 去重:刪除了 {before_count - after_count} 條重復(fù)數(shù)據(jù)")
    
    # 2. 補(bǔ)全缺失值
    # 數(shù)值型列用平均值填充
    numeric_cols = df_clean.select_dtypes(include=['number']).columns
    df_clean[numeric_cols] = df_clean[numeric_cols].fillna(df_clean[numeric_cols].mean())
    # 文本型列用"未知"填充
    text_cols = df_clean.select_dtypes(include=['object']).columns
    df_clean[text_cols] = df_clean[text_cols].fillna("未知")
    print("?? 補(bǔ)全缺失值:已處理所有空值")
    
    # 3. 格式轉(zhuǎn)換(日期列統(tǒng)一格式)
    date_cols = [col for col in df_clean.columns if 'date' in col.lower() or '時(shí)間' in col]
    for col in date_cols:
        try:
            df_clean[col] = pd.to_datetime(df_clean[col]).dt.strftime('%Y-%m-%d')
        except:
            pass
    print("?? 格式轉(zhuǎn)換:日期列已統(tǒng)一格式")
    
    # 4. 異常值處理(簡(jiǎn)單的3σ原則)
    for col in numeric_cols:
        mean = df_clean[col].mean()
        std = df_clean[col].std()
        lower = mean - 3 * std
        upper = mean + 3 * std
        # 異常值用中位數(shù)替換
        median = df_clean[col].median()
        df_clean[col] = df_clean[col].apply(lambda x: median if x < lower or x > upper else x)
    print("?? 異常值處理:已處理數(shù)值型列的異常值")
    
    return df_clean

# ---------------------------
# 3. 自動(dòng)生成統(tǒng)計(jì)指標(biāo)
# ---------------------------
def generate_stats(df, group_col, value_col):
    """
    生成統(tǒng)計(jì)報(bào)表:
    按 group_col 分組,統(tǒng)計(jì) value_col 的 總和、平均值、最大值、最小值
    """
    stats = df.groupby(group_col).agg(
        總和=(value_col, 'sum'),
        平均值=(value_col, 'mean'),
        最大值=(value_col, 'max'),
        最小值=(value_col, 'min'),
        數(shù)量=(value_col, 'count')
    ).reset_index()
    
    # 格式化數(shù)值(保留2位小數(shù))
    numeric_cols = ['總和', '平均值', '最大值', '最小值']
    stats[numeric_cols] = stats[numeric_cols].round(2)
    
    print(f"?? 統(tǒng)計(jì)完成:按 {group_col} 分組,統(tǒng)計(jì) {value_col}")
    return stats

# ---------------------------
# 4. 一鍵美化報(bào)表(Excel)
# ---------------------------
def beautify_excel(file_path, sheet_names):
    """
    美化Excel報(bào)表:
    1. 設(shè)置表頭樣式
    2. 設(shè)置列寬
    3. 設(shè)置邊框
    4. 設(shè)置對(duì)齊
    """
    from openpyxl import load_workbook
    from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
    
    wb = load_workbook(file_path)
    
    # 定義樣式
    header_font = Font(name='微軟雅黑', size=12, bold=True, color='FFFFFF')
    header_fill = PatternFill(start_color='165DFF', end_color='165DFF', fill_type='solid')
    header_alignment = Alignment(horizontal='center', vertical='center')
    cell_font = Font(name='微軟雅黑', size=10)
    cell_alignment = Alignment(horizontal='center', vertical='center')
    thin_border = Border(
        left=Side(style='thin'),
        right=Side(style='thin'),
        top=Side(style='thin'),
        bottom=Side(style='thin')
    )
    
    for sheet_name in sheet_names:
        if sheet_name not in wb.sheetnames:
            continue
        ws = wb[sheet_name]
        
        # 設(shè)置表頭
        for cell in ws[1]:
            cell.font = header_font
            cell.fill = header_fill
            cell.alignment = header_alignment
            cell.border = thin_border
        
        # 設(shè)置數(shù)據(jù)行
        for row in ws.iter_rows(min_row=2):
            for cell in row:
                cell.font = cell_font
                cell.alignment = cell_alignment
                cell.border = thin_border
        
        # 自動(dòng)調(diào)整列寬
        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
    
    wb.save(file_path)
    print("?? 美化完成:Excel報(bào)表已一鍵美化")

# ---------------------------
# 5. 自動(dòng)插入圖表
# ---------------------------
def add_charts_to_excel(file_path, stats_df, sheet_name, chart_type='bar'):
    """
    在Excel中插入圖表
    """
    import xlsxwriter
    
    # 用xlsxwriter重新寫入(方便插入圖表)
    temp_path = file_path.replace('.xlsx', '_temp.xlsx')
    with pd.ExcelWriter(temp_path, engine='xlsxwriter') as writer:
        stats_df.to_excel(writer, sheet_name=sheet_name, index=False)
        
        workbook = writer.book
        worksheet = writer.sheets[sheet_name]
        
        # 創(chuàng)建圖表
        if chart_type == 'bar':
            chart = workbook.add_chart({'type': 'column'})
        elif chart_type == 'line':
            chart = workbook.add_chart({'type': 'line'})
        elif chart_type == 'pie':
            chart = workbook.add_chart({'type': 'pie'})
        else:
            chart = workbook.add_chart({'type': 'column'})
        
        # 配置圖表數(shù)據(jù)
        max_row = len(stats_df)
        chart.add_series({
            'name': [sheet_name, 0, 1],
            'categories': [sheet_name, 1, 0, max_row, 0],
            'values': [sheet_name, 1, 1, max_row, 1],
        })
        
        # 設(shè)置圖表標(biāo)題
        chart.set_title({'name': f'{stats_df.columns[0]} vs {stats_df.columns[1]}'})
        chart.set_x_axis({'name': stats_df.columns[0]})
        chart.set_y_axis({'name': stats_df.columns[1]})
        
        # 插入圖表
        worksheet.insert_chart('F2', chart)
    
    # 替換原文件
    os.replace(temp_path, file_path)
    print("?? 圖表插入完成")

# ---------------------------
# 主函數(shù):一鍵處理數(shù)據(jù)
# ---------------------------
def run_data_processor(file_name, group_col, value_col, chart_type='bar'):
    print("?? 數(shù)據(jù)處理流水線啟動(dòng)...")
    
    # 1. 讀取數(shù)據(jù)
    file_path = os.path.join(RAW_DATA_PATH, file_name)
    if not os.path.exists(file_path):
        print(f"? 文件不存在:{file_path}")
        return
    df = read_raw_data(file_path)
    print(f"? 讀取成功:共 {len(df)} 條數(shù)據(jù)")
    
    # 2. 清洗數(shù)據(jù)
    df_clean = clean_data(df)
    
    # 3. 生成統(tǒng)計(jì)
    stats = generate_stats(df_clean, group_col, value_col)
    
    # 4. 保存結(jié)果
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    output_file = os.path.join(OUTPUT_PATH, f'報(bào)表_{timestamp}.xlsx')
    
    # 寫入多個(gè)sheet
    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
        df_clean.to_excel(writer, sheet_name='清洗后數(shù)據(jù)', index=False)
        stats.to_excel(writer, sheet_name='統(tǒng)計(jì)報(bào)表', index=False)
    
    # 5. 插入圖表
    add_charts_to_excel(output_file, stats, '統(tǒng)計(jì)報(bào)表', chart_type)
    
    # 6. 美化報(bào)表
    beautify_excel(output_file, ['清洗后數(shù)據(jù)', '統(tǒng)計(jì)報(bào)表'])
    
    print(f"?? 全部完成!報(bào)表已保存至:{output_file}")
    return output_file

if __name__ == "__main__":
    # 示例:處理銷售數(shù)據(jù),按"產(chǎn)品"分組,統(tǒng)計(jì)"銷售額",插入柱狀圖
    # 你需要先在 raw_data 文件夾放一個(gè)測(cè)試文件
    # run_data_processor('銷售數(shù)據(jù).xlsx', '產(chǎn)品', '銷售額', 'bar')
    print("請(qǐng)?jiān)诖a中配置你的數(shù)據(jù)文件和統(tǒng)計(jì)字段后運(yùn)行!")

新建 .env 文件(可選):

# 可以在這里配置默認(rèn)參數(shù)
DEFAULT_GROUP_COL=產(chǎn)品
DEFAULT_VALUE_COL=銷售額
DEFAULT_CHART_TYPE=bar

四、運(yùn)行效果(直接看得到)

運(yùn)行后你會(huì)立刻看到:

1.控制臺(tái)顯示每一步的處理進(jìn)度

2.processed_reports 文件夾生成一個(gè)帶時(shí)間戳的 Excel 文件

3.Excel 包含兩個(gè) sheet:

  • 清洗后數(shù)據(jù):去重、補(bǔ)全、格式統(tǒng)一
  • 統(tǒng)計(jì)報(bào)表:自動(dòng)計(jì)算的指標(biāo) + 自動(dòng)插入的圖表

4.報(bào)表已經(jīng)一鍵美化:藍(lán)色表頭、統(tǒng)一字體、自動(dòng)列寬、居中對(duì)齊

你以后只需要:把原始數(shù)據(jù)丟進(jìn) raw_data → 改一下代碼里的字段名 → 運(yùn)行 → 拿報(bào)表

五、可以直接擴(kuò)展的進(jìn)階功能

你可以在這篇基礎(chǔ)上隨便加,非常適合寫進(jìn)博客:

  • 批量處理文件夾:自動(dòng)遍歷 raw_data 下所有文件
  • 自動(dòng)發(fā)送郵件:和你前面的郵件機(jī)器人聯(lián)動(dòng),報(bào)表生成后自動(dòng)發(fā)出去
  • 定時(shí)生成:每天早上 8 點(diǎn)自動(dòng)生成昨天的日?qǐng)?bào)
  • 多維度統(tǒng)計(jì):同時(shí)按多個(gè)維度分組(產(chǎn)品+部門+時(shí)間)
  • 和看板聯(lián)動(dòng):把統(tǒng)計(jì)結(jié)果直接推送到你的辦公看板

六、總結(jié)

本篇我們實(shí)現(xiàn)了企業(yè)級(jí)全自動(dòng)數(shù)據(jù)處理流水線,從 0 到 1 完成:原始數(shù)據(jù)讀取 → 自動(dòng)清洗(去重/補(bǔ)全/格式轉(zhuǎn)換)→ 自動(dòng)統(tǒng)計(jì) → 自動(dòng)插入圖表 → 一鍵美化。

代碼輕量、穩(wěn)定、可復(fù)用,新手也能直接跑起來,每天幫你節(jié)省大量處理數(shù)據(jù)的時(shí)間。

這也是辦公自動(dòng)化體系里非常核心的一環(huán):數(shù)據(jù)處理是基礎(chǔ),看板負(fù)責(zé)展示,AI 助手負(fù)責(zé)交互,郵件機(jī)器人負(fù)責(zé)分發(fā),真正實(shí)現(xiàn)全流程自動(dòng)化。

到此這篇關(guān)于Python數(shù)據(jù)自動(dòng)化處理之?dāng)?shù)據(jù)清洗和報(bào)表生成詳解的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pycharm安裝第三方庫(kù)失敗解決方案

    Pycharm安裝第三方庫(kù)失敗解決方案

    這篇文章主要介紹了Pycharm安裝第三方庫(kù)失敗解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python使用xlrd與xlwt對(duì)excel的讀寫和格式設(shè)定

    python使用xlrd與xlwt對(duì)excel的讀寫和格式設(shè)定

    最近在用python處理excel表的時(shí)候出現(xiàn)了一些問題,所以想著記錄下最后的實(shí)現(xiàn)方式和問題解決方法。方便自己或者大家在有需要的時(shí)候參考借鑒,下面這篇文章主要就介紹了python使用xlrd與xlwt對(duì)excel的讀寫和格式設(shè)定的相關(guān)資料,一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • Python基于正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能

    Python基于正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要介紹了Python基于正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python列表的切片與復(fù)制示例分析

    python列表的切片與復(fù)制示例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python列表的切片與復(fù)制示例分析及相關(guān)代碼,有興趣點(diǎn)朋友們可以參考下。
    2021-10-10
  • 對(duì)django xadmin自定義菜單的實(shí)例詳解

    對(duì)django xadmin自定義菜單的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)django xadmin自定義菜單的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Python+Tkinter實(shí)現(xiàn)音樂播放器

    基于Python+Tkinter實(shí)現(xiàn)音樂播放器

    Tkinter 是 Python 中用于創(chuàng)建圖形用戶界面 (GUI) 的標(biāo)準(zhǔn)庫(kù)之一,它是一個(gè)簡(jiǎn)單而強(qiáng)大的工具,適用于創(chuàng)建各種類型的窗口應(yīng)用程序,本文給大家介紹了如何基于Python+Tkinter實(shí)現(xiàn)音樂播放器,需要的朋友可以參考下
    2025-03-03
  • python3模擬實(shí)現(xiàn)xshell遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法

    python3模擬實(shí)現(xiàn)xshell遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法

    今天小編就為大家分享一篇python3模擬實(shí)現(xiàn)xshell遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 從安裝到到高級(jí)排錯(cuò)詳解Mac上優(yōu)雅管理Python多版本的全攻略

    從安裝到到高級(jí)排錯(cuò)詳解Mac上優(yōu)雅管理Python多版本的全攻略

    作為Python開發(fā)者,在Mac上管理多個(gè)Python版本是一項(xiàng)必備技能,本文將帶你從基礎(chǔ)安裝到高級(jí)排錯(cuò),一站式解決所有問題,希望對(duì)大家有所幫助
    2026-02-02
  • python代碼實(shí)現(xiàn)煙花實(shí)例

    python代碼實(shí)現(xiàn)煙花實(shí)例

    這篇文章主要給大家分享了python煙花詳細(xì)的代碼,文章主要以python煙花的代碼展開全文,所以解說會(huì)比較少,代碼較多。喜歡的小伙伴可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • 在pytorch中對(duì)非葉節(jié)點(diǎn)的變量計(jì)算梯度實(shí)例

    在pytorch中對(duì)非葉節(jié)點(diǎn)的變量計(jì)算梯度實(shí)例

    今天小編就為大家分享一篇在pytorch中對(duì)非葉節(jié)點(diǎn)的變量計(jì)算梯度實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評(píng)論

吉水县| 腾冲县| 淮北市| 岳阳县| 繁昌县| 云南省| 将乐县| 吉木萨尔县| 长岛县| 廉江市| 石河子市| 武强县| 莱阳市| 隆安县| 木兰县| 米易县| 洛扎县| 盐源县| 万安县| 新闻| 华蓥市| 沐川县| 嫩江县| 米脂县| 凭祥市| 乐业县| 灵丘县| 子洲县| 牙克石市| 玛多县| 营山县| 安达市| 道孚县| 江都市| 遵义市| 应城市| 和龙市| 扎囊县| 合山市| 丹东市| 蒲江县|