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

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

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

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

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

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

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

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

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

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

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

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

一鍵美化報表(字體、顏色、邊框、對齊)

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

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

1. 安裝依賴

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

pip install pandas openpyxl xlsxwriter python-dotenv

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

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

三、核心代碼:全自動數(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):
    """自動識別文件格式并讀取"""
    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. 自動數(shù)據(jù)清洗
# ---------------------------
def clean_data(df):
    """
    通用數(shù)據(jù)清洗函數(shù):
    1. 去重
    2. 補全缺失值
    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. 補全缺失值
    # 數(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("?? 補全缺失值:已處理所有空值")
    
    # 3. 格式轉(zhuǎn)換(日期列統(tǒng)一格式)
    date_cols = [col for col in df_clean.columns if 'date' in col.lower() or '時間' 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. 異常值處理(簡單的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. 自動生成統(tǒng)計指標(biāo)
# ---------------------------
def generate_stats(df, group_col, value_col):
    """
    生成統(tǒng)計報表:
    按 group_col 分組,統(tǒng)計 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)計完成:按 {group_col} 分組,統(tǒng)計 {value_col}")
    return stats

# ---------------------------
# 4. 一鍵美化報表(Excel)
# ---------------------------
def beautify_excel(file_path, sheet_names):
    """
    美化Excel報表:
    1. 設(shè)置表頭樣式
    2. 設(shè)置列寬
    3. 設(shè)置邊框
    4. 設(shè)置對齊
    """
    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
        
        # 自動調(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報表已一鍵美化")

# ---------------------------
# 5. 自動插入圖表
# ---------------------------
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ù)處理流水線啟動...")
    
    # 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)計
    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'報表_{timestamp}.xlsx')
    
    # 寫入多個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)計報表', index=False)
    
    # 5. 插入圖表
    add_charts_to_excel(output_file, stats, '統(tǒng)計報表', chart_type)
    
    # 6. 美化報表
    beautify_excel(output_file, ['清洗后數(shù)據(jù)', '統(tǒng)計報表'])
    
    print(f"?? 全部完成!報表已保存至:{output_file}")
    return output_file

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

新建 .env 文件(可選):

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

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

運行后你會立刻看到:

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

2.processed_reports 文件夾生成一個帶時間戳的 Excel 文件

3.Excel 包含兩個 sheet:

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

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

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

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

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

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

六、總結(jié)

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

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

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

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

相關(guān)文章

  • Pycharm安裝第三方庫失敗解決方案

    Pycharm安裝第三方庫失敗解決方案

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

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

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

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

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

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

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

    對django xadmin自定義菜單的實例詳解

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

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

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

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

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

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

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

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

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

    在pytorch中對非葉節(jié)點的變量計算梯度實例

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

最新評論

河北区| 西吉县| 长顺县| 扎鲁特旗| 大竹县| 榆树市| 蕲春县| 泸溪县| 沙洋县| 济宁市| 沂源县| 香格里拉县| 民丰县| 绥阳县| 隆德县| 久治县| 博野县| 台南市| 蕉岭县| 贵阳市| 贡嘎县| 白沙| 彰化县| 安岳县| 富顺县| 辛集市| 毕节市| 集贤县| 天镇县| 华容县| 兴安盟| 鲜城| 澎湖县| 高密市| 黄陵县| 内江市| 崇仁县| 内丘县| 青阳县| 扬州市| 兴海县|