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

使用Python自動化處理Excel的臟數(shù)據(jù)

 更新時間:2025年11月14日 10:20:09   作者:愛分享的飄哥  
在日常工作中,Excel表格是我們的好伙伴,但你有沒有被臟數(shù)據(jù)坑過?多個人工錄入,導致姓名、電話號碼重復好幾行,數(shù)據(jù)來源不一,部分單元格缺失了關鍵信息等,本文將帶你深入Python數(shù)據(jù)清洗的奇妙世界!我們將手把手教你如何處理這些Excel的臟數(shù)據(jù),需要的朋友可以參考下

Excel臟數(shù)據(jù)“坑”死人!重復、缺失、格式不一,數(shù)據(jù)分析全跑偏!

在日常工作中,Excel表格是我們的好伙伴,但你有沒有被“臟數(shù)據(jù)”坑過?

多個人工錄入,導致姓名、電話號碼重復好幾行。

數(shù)據(jù)來源不一,部分單元格缺失了關鍵信息。

“蘋果”、“apple”、“Apple”……同一個商品名稱,格式不統(tǒng)一。

年齡寫成了“200歲”,銷售額填成了負數(shù),這些異常值讓平均數(shù)失去意義。

這些“臟數(shù)據(jù)”就像報表中的“地雷”,輕則讓你多加班幾小時核對,重則導致分析結果全跑偏,決策失誤!

今天,我將帶你深入Python數(shù)據(jù)清洗的奇妙世界!我們將手把手教你如何利用數(shù)據(jù)處理的“瑞士軍刀”——Pandas庫,輕松實現(xiàn):

數(shù)據(jù)去重: 一鍵移除重復數(shù)據(jù),讓表格清爽。

缺失值處理: 智能填充或刪除“空白”,讓數(shù)據(jù)完整。

格式統(tǒng)一: 規(guī)范字符串、轉換數(shù)據(jù)類型,讓數(shù)據(jù)“服服帖帖”。

異常值識別: 揪出數(shù)據(jù)中的“搗亂分子”。

最終,讓你的數(shù)據(jù)分析從此變得精準可靠!

1.數(shù)據(jù)清洗第一步:Python自動化處理重復值

在Python數(shù)據(jù)清洗中,處理重復值是提高數(shù)據(jù)質(zhì)量的第一個關鍵步驟。重復數(shù)據(jù)不僅會占用存儲空間,更重要的是會導致統(tǒng)計結果偏差,讓你的報表分析全跑偏!

1.1 什么是重復值?為什么需要去重?

場景: 你有一份客戶名單,由于多次導入,同一個客戶的信息出現(xiàn)了好幾次?;蛘咪N售記錄中,同一筆訂單被意外記錄了兩次。

重復值是指在數(shù)據(jù)集中,某一行或某些列的數(shù)據(jù)與另一行(或多行)完全相同。它可能由以下原因造成:

人工錄入失誤: 重復輸入同一條數(shù)據(jù)。
多源數(shù)據(jù)合并: 從不同系統(tǒng)導入數(shù)據(jù)時,沒有進行去重處理。
系統(tǒng)故障: 導入流程中的錯誤導致數(shù)據(jù)重復。

為什么必須去重?
影響統(tǒng)計結果: 如果客戶名單重復,活躍客戶數(shù)就會算錯;銷售訂單重復,總銷售額就會虛高。
降低數(shù)據(jù)質(zhì)量: 影響后續(xù)的數(shù)據(jù)分析和決策的精準度。
浪費存儲資源: 簡單的數(shù)據(jù)冗余。

1.2 Pandas drop_duplicates():一鍵去重,讓數(shù)據(jù)清爽起來!

方案: Pandas庫提供了極其強大的drop_duplicates()方法,能讓你一鍵移除DataFrame中的重復行,這是實現(xiàn)Pandas數(shù)據(jù)清洗教程中不可或缺的利器!

代碼:

import pandas as pd
import os

def remove_duplicates_from_excel(file_path, output_path, subset_cols=None):
    """
    從Excel文件中移除重復行。
    這是Python數(shù)據(jù)清洗和數(shù)據(jù)去重的核心功能。
    :param file_path: 源Excel文件路徑
    :param output_path: 去重后Excel文件的輸出路徑
    :param subset_cols: 可選,指定根據(jù)哪些列判斷重復。如果為None,則根據(jù)所有列判斷。
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    
    try:
        df = pd.read_excel(file_path)
        original_rows = len(df)
        print(f"?? 正在處理文件 '{os.path.basename(file_path)}',原始行數(shù): {original_rows}")

        if subset_cols:
            # 根據(jù)指定列去重
            df_cleaned = df.drop_duplicates(subset=subset_cols, keep='first') # keep='first'保留第一次出現(xiàn)的重復項
            print(f"   ?? 根據(jù)列 {subset_cols} 去重。")
        else:
            # 根據(jù)所有列去重
            df_cleaned = df.drop_duplicates(keep='first')
            print("   ?? 根據(jù)所有列去重。")
        
        cleaned_rows = len(df_cleaned)
        removed_count = original_rows - cleaned_rows

        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df_cleaned.to_excel(output_path, index=False)
        
        print(f"? 去重成功!已移除 {removed_count} 條重復數(shù)據(jù)。")
        print(f"   去重后數(shù)據(jù)已保存到:'{os.path.basename(output_path)}' (行數(shù): {cleaned_rows})")
        print("\n   --- 去重后數(shù)據(jù)頭部 ---")
        print(df_cleaned.head())
    except Exception as e:
        print(f"? 去重失?。簕e}")

if __name__ == "__main__":
    # 準備測試Excel文件,包含重復行
    # 例如:
    # ID | Name | Phone
    # -- | ---- | -----
    # 1  | Alice| 111
    # 2  | Bob  | 222
    # 1  | Alice| 111  <-- 重復行
    # 3  | Carol| 333
    # 2  | Bob  | 444  <-- Phone不同,如果按ID+Name去重,則不算重復
    
    test_excel_path = os.path.expanduser("~/Desktop/customer_data_duplicates.xlsx")
    output_cleaned_path = os.path.expanduser("~/Desktop/customer_data_cleaned.xlsx")

    # 簡單創(chuàng)建測試文件(包含重復)
    pd.DataFrame({'ID': [1, 2, 1, 3, 2], 
                  'Name': ['Alice', 'Bob', 'Alice', 'Carol', 'Bob'], 
                  'Phone': ['111', '222', '111', '333', '444']}).to_excel(test_excel_path, index=False)

    print("--- 示例1:根據(jù)所有列去重 ---")
    remove_duplicates_from_excel(test_excel_path, output_cleaned_path)

    print("\n--- 示例2:根據(jù) 'ID' 和 'Name' 列去重 ---")
    remove_duplicates_from_excel(test_excel_path, os.path.expanduser("~/Desktop/customer_data_id_name_cleaned.xlsx"), subset_cols=['ID', 'Name'])

步驟:

準備Excel文件: 在桌面創(chuàng)建一個名為customer_data_duplicates.xlsx的Excel文件,并在其中輸入一些包含重復行的數(shù)據(jù)(可參照示例代碼)。

修改代碼路徑和去重列: 修改 test_excel_path、output_cleaned_path 和 subset_cols(如果需要)。
運行: 在VS Code終端運行 python remove_duplicates.py。

展示:

2.缺失值處理:Python智能填充,讓數(shù)據(jù)完整無缺

場景: Excel表格中有很多“空白”單元格(缺失值),它們可能是數(shù)據(jù)錄入時遺漏的,也可能是數(shù)據(jù)導出時出現(xiàn)的問題。這些缺失值會導致公式報錯、分析結果不準確。

缺失值是數(shù)據(jù)質(zhì)量的又一殺手。Python的Pandas庫提供了靈活的缺失值處理策略,讓你選擇智能填充或刪除,確保數(shù)據(jù)完整無缺。

實現(xiàn):Pandas將缺失值統(tǒng)一表示為NaN(Not a Number),然后提供一系列方法來識別、填充或刪除它們。

2.1 識別缺失值:isnull()/isna(),空白全部識別

在處理缺失值之前,我們首先要知道哪些地方有缺失值。

代碼:

import pandas as pd
import os

def identify_missing_values(file_path):
    """
    識別Excel文件中的缺失值,并顯示其分布。
    這是缺失值處理的第一步。
    :param file_path: Excel文件路徑
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    
    try:
        df = pd.read_excel(file_path)
        print(f"?? 正在識別文件 '{os.path.basename(file_path)}' 中的缺失值...")
        
        # 核心操作:isnull() 返回一個布爾型DataFrame,每個True表示一個缺失值
        missing_data = df.isnull() 
        print("\n   --- 缺失值布爾型視圖(True表示缺失)---")
        print(missing_data.head())

        # 統(tǒng)計每列的缺失值數(shù)量
        missing_counts = df.isnull().sum()
        print("\n   --- 每列缺失值數(shù)量 ---")
        print(missing_counts)

        # 統(tǒng)計總缺失值數(shù)量
        total_missing = df.isnull().sum().sum()
        print(f"\n   總缺失值數(shù)量: {total_missing}")
        
        # 可選:顯示缺失值比例
        missing_percentage = df.isnull().sum() * 100 / len(df)
        print("\n   --- 每列缺失值比例 (%) ---")
        print(missing_percentage)

    except Exception as e:
        print(f"? 識別缺失值失?。簕e}")

if __name__ == "__main__":
    # 準備測試Excel文件,包含一些缺失值 (空單元格或#N/A)
    # 例如:
    # Name | Age | City
    # ---- | --- | ----
    # Alice| 25  | NY
    # Bob  | NaN | LA   <-- 缺失
    # Carol| 30  |      <-- 缺失
    test_excel_path = os.path.expanduser("~/Desktop/data_with_missing.xlsx")
    pd.DataFrame({'Name': ['Alice', 'Bob', 'Carol', 'David'], 
                  'Age': [25, None, 30, 40], 
                  'City': ['NY', 'LA', None, 'SF']}).to_excel(test_excel_path, index=False)

    identify_missing_values(test_excel_path)

步驟:

準備Excel文件: 在桌面創(chuàng)建data_with_missing.xlsx,并在其中輸入一些包含空單元格的數(shù)據(jù)。
修改代碼路徑: 修改 test_excel_path。

運行: 運行 python identify_missing.py。

展示:

2.2 填充缺失值:fillna(),智能補齊數(shù)據(jù)空白

場景: 你希望用某種合理的值來替代缺失的數(shù)據(jù),而不是直接刪除整行,以保留盡可能多的信息。比如用平均值填充年齡,或用“未知”填充空字符串。

方案: df.fillna()方法提供了多種智能填充策略,讓你根據(jù)數(shù)據(jù)特性選擇最合適的填充方式。

代碼:

import pandas as pd
import os

def fill_missing_values(file_path, output_path, fill_strategy="mean"):
    """
    填充Excel文件中的缺失值。
    這是Python數(shù)據(jù)清洗和缺失值處理的核心功能,實現(xiàn)數(shù)據(jù)完整無缺。
    :param file_path: 源Excel文件路徑
    :param output_path: 填充后Excel文件的輸出路徑
    :param fill_strategy: 填充策略 ("mean", "median", "mode", "ffill", "bfill", "constant")
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    try:
        df = pd.read_excel(file_path)
        print(f"?? 正在使用 '{fill_strategy}' 策略填充 '{os.path.basename(file_path)}' 中的缺失值...")
        
        df_filled = df.copy() # 操作副本,不改變原DataFrame

        if fill_strategy == "mean":
            df_filled = df_filled.fillna(df_filled.mean(numeric_only=True)) # 填充數(shù)值列的均值
        elif fill_strategy == "median":
            df_filled = df_filled.fillna(df_filled.median(numeric_only=True)) # 填充數(shù)值列的中位數(shù)
        elif fill_strategy == "mode":
            # 眾數(shù)可能不止一個,這里取第一個
            for col in df_filled.columns:
                if df_filled[col].isnull().any():
                    mode_val = df_filled[col].mode()[0] if not df_filled[col].mode().empty else None
                    df_filled[col] = df_filled[col].fillna(mode_val)
        elif fill_strategy == "ffill": # forward fill,用前一個非缺失值填充
            df_filled = df_filled.fillna(method='ffill')
        elif fill_strategy == "bfill": # backward fill,用后一個非缺失值填充
            df_filled = df_filled.fillna(method='bfill')
        elif fill_strategy == "constant": # 用固定值填充
            # 針對不同數(shù)據(jù)類型可以設置不同常數(shù),這里簡化
            df_filled = df_filled.fillna("未知") # 填充字符串為“未知”
            df_filled = df_filled.fillna(0, numeric_only=True) # 填充數(shù)字為0
        else:
            print("?? 未知填充策略。")
            
        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df_filled.to_excel(output_path, index=False)
        
        print(f"? 缺失值填充成功!結果保存到:'{os.path.basename(output_path)}'")
        print("\n   --- 填充后數(shù)據(jù)頭部 ---")
        print(df_filled.head())
    except Exception as e:
        print(f"? 填充缺失值失敗:{e}")

if __name__ == "__main__":
    test_excel_path = os.path.expanduser("~/Desktop/data_with_missing.xlsx") # 使用2.1節(jié)創(chuàng)建的文件
    output_filled_path_mean = os.path.expanduser("~/Desktop/data_filled_mean.xlsx")
    output_filled_path_constant = os.path.expanduser("~/Desktop/data_filled_unknown.xlsx")

    # 示例1:用均值填充數(shù)值缺失值
    fill_missing_values(test_excel_path, output_filled_path_mean, fill_strategy="mean")

    # 示例2:用常數(shù)“未知”填充字符串缺失值
    # fill_missing_values(test_excel_path, output_filled_path_constant, fill_strategy="constant")

步驟:

準備Excel文件: 使用2.1節(jié)創(chuàng)建的data_with_missing.xlsx文件。

修改代碼路徑和填充策略: 修改 test_excel_path、output_filled_path_mean 和 fill_strategy。

運行: 運行 python fill_missing.py。

展示:

2.3 刪除缺失值:dropna(),保證數(shù)據(jù)完整性

場景: 有些數(shù)據(jù)行的缺失值太多,或者在關鍵列有缺失,導致整行數(shù)據(jù)價值不大,直接刪除是更有效的處理方式。

方案: df.dropna()方法能根據(jù)你的需求,一鍵刪除包含缺失值的行或列,確保你分析的數(shù)據(jù)集是完全完整無缺的。

代碼:

import pandas as pd
import os

def drop_missing_values(file_path, output_path, how_to_drop="any", subset_cols=None):
    """
    刪除Excel文件中包含缺失值的行或列。
    這是Python數(shù)據(jù)清洗和缺失值處理的關鍵功能。
    :param file_path: 源Excel文件路徑
    :param output_path: 刪除后Excel文件的輸出路徑
    :param how_to_drop: 刪除策略 ("any" - 只要有缺失就刪除, "all" - 整行/列都是缺失才刪除)
    :param subset_cols: 可選,指定只檢查這些列的缺失值
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    try:
        df = pd.read_excel(file_path)
        original_rows = len(df)
        print(f"?? 正在刪除 '{os.path.basename(file_path)}' 中的缺失值,原始行數(shù): {original_rows}")

        # **核心操作:df.dropna()**
        # how="any" 表示只要有任一缺失值就刪除該行/列
        # how="all" 表示只有當所有值為缺失值時才刪除該行/列
        # axis=0 (默認) 表示刪除行,axis=1 表示刪除列
        df_dropped = df.dropna(how=how_to_drop, subset=subset_cols)
        
        dropped_rows = original_rows - len(df_dropped)

        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df_dropped.to_excel(output_path, index=False)
        
        print(f"? 缺失值刪除成功!已刪除 {dropped_rows} 條數(shù)據(jù)。")
        print(f"   刪除后數(shù)據(jù)已保存到:'{os.path.basename(output_path)}' (行數(shù): {len(df_dropped)})")
        print("\n   --- 刪除后數(shù)據(jù)頭部 ---")
        print(df_dropped.head())
    except Exception as e:
        print(f"? 刪除缺失值失?。簕e}")

if __name__ == "__main__":
    test_excel_path = os.path.expanduser("~/Desktop/data_with_missing.xlsx") # 使用2.1節(jié)創(chuàng)建的文件
    output_dropped_any = os.path.expanduser("~/Desktop/data_dropped_any.xlsx")
    output_dropped_subset = os.path.expanduser("~/Desktop/data_dropped_subset.xlsx")

    # 示例1:刪除任何包含缺失值的行
    print("\n--- 示例1:刪除任何包含缺失值的行 ---")
    drop_missing_values(test_excel_path, output_dropped_any, how_to_drop="any")

    # 示例2:只刪除 'Age' 列有缺失值的行
    print("\n--- 示例2:只刪除 'Age' 列有缺失值的行 ---")
    drop_missing_values(test_excel_path, output_dropped_subset, how_to_drop="any", subset_cols=['Age'])

步驟:

準備Excel文件: 使用2.1節(jié)創(chuàng)建的data_with_missing.xlsx文件。

修改代碼路徑和刪除策略: 修改 test_excel_path、output_dropped_any 等,并調(diào)整 how_to_drop 和 subset_cols。

運行: 運行 python drop_missing.py。

展示:

3.格式統(tǒng)一與異常值處理:Python讓你的數(shù)據(jù)規(guī)范化

場景: Excel表格中,姓名大小寫不一,“手機號”被存成了文本格式,日期混亂。還有一些明顯錯誤的“搗亂分子”(如年齡200歲),這些都讓你的Excel臟數(shù)據(jù)分析困難。

方案: Pandas能幫你自動化處理Excel臟數(shù)據(jù)中的格式不統(tǒng)一問題,并對異常值進行簡單識別和過濾,讓你的數(shù)據(jù)質(zhì)量達到新高度。

作用: Pandas提供強大的字符串操作、類型轉換和統(tǒng)計方法,用于數(shù)據(jù)的精細化管理。

3.1 字符串格式統(tǒng)一:大小寫、空格、特殊字符,一鍵規(guī)范化

場景: “APPLE”、“apple”、“ Apple”……同一個商品名稱,大小寫、空格不一致,導致統(tǒng)計時被認為是不同的商品。

方案: Pandas對字符串操作非常靈活,可以輕松實現(xiàn)大小寫轉換、去除多余空格、清理特殊字符等

代碼:

import pandas as pd
import os

def normalize_strings_in_excel(file_path, output_path, column_name="Product"):
    """
    統(tǒng)一Excel指定列的字符串格式(大小寫,去除空格)。
    這是Python數(shù)據(jù)清洗和Excel數(shù)據(jù)處理自動化的常見操作。
    :param file_path: 源Excel文件路徑
    :param output_path: 統(tǒng)一格式后Excel文件的輸出路徑
    :param column_name: 要處理的字符串列名
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    try:
        df = pd.read_excel(file_path)
        print(f"?? 正在統(tǒng)一列 '{column_name}' 的字符串格式...")

        # 確保列是字符串類型,然后進行操作
        if pd.api.types.is_string_dtype(df[column_name]):
            # 核心操作:轉換為小寫,去除首尾空格
            df[column_name] = df[column_name].str.lower().str.strip()
            print("   ? 已將字符串轉換為小寫并去除首尾空格。")
        else:
            print(f"?? 列 '{column_name}' 不是字符串類型,跳過格式統(tǒng)一。")
        
        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df.to_excel(output_path, index=False)
        
        print(f"? 字符串格式統(tǒng)一成功!結果保存到:'{os.path.basename(output_path)}'")
        print("\n   --- 統(tǒng)一格式后數(shù)據(jù)頭部 ---")
        print(df.head())
    except Exception as e:
        print(f"? 字符串格式統(tǒng)一失?。簕e}")

if __name__ == "__main__":
    test_excel_path = os.path.expanduser("~/Desktop/product_names.xlsx")
    output_cleaned_path = os.path.expanduser("~/Desktop/product_names_cleaned.xlsx")

    pd.DataFrame({'Product': [' APPLE ', 'Banana', 'ORANGE ', ' apple'], 'Price': [10, 5, 8, 12]}).to_excel(test_excel_path, index=False)

    normalize_strings_in_excel(test_excel_path, output_cleaned_path, column_name="Product")

步驟:

準備Excel文件: 在桌面創(chuàng)建product_names.xlsx,包含一些大小寫、空格不一致的文本數(shù)據(jù)。

修改代碼路徑和列名: 修改 test_excel_path、output_cleaned_path 和 column_name。

運行: 運行 python normalize_strings.py。

展示:

3.2 數(shù)據(jù)類型轉換:文本變數(shù)字、日期格式化,讓數(shù)據(jù)自動計算

場景: 從不同系統(tǒng)導出的Excel文件,數(shù)字(如銷售額)被識別為文本,日期格式五花八門。這導致你無法進行計算、排序或篩選。

方案: Pandas可以強制轉換列的數(shù)據(jù)類型,確保數(shù)字就是數(shù)字,日期就是日期,便于后續(xù)數(shù)據(jù)分析**。
代碼:

import pandas as pd
import os

def convert_data_types_in_excel(file_path, output_path):
    """
    轉換Excel文件中指定列的數(shù)據(jù)類型。
    這是Python數(shù)據(jù)清洗和Excel數(shù)據(jù)處理自動化的核心。
    :param file_path: 源Excel文件路徑
    :param output_path: 轉換后Excel文件的輸出路徑
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    try:
        df = pd.read_excel(file_path)
        print(f"?? 正在轉換 '{os.path.basename(file_path)}' 中的數(shù)據(jù)類型...")
        print("\n   --- 原始數(shù)據(jù)類型 ---")
        print(df.dtypes)

        # **核心操作1:文本列轉為數(shù)值**
        # errors='coerce' 會將無法轉換的值變?yōu)镹aN,而不是報錯
        df['Sales_Amount'] = pd.to_numeric(df['Sales_Amount'], errors='coerce')
        
        # **核心操作2:統(tǒng)一日期格式**
        df['Order_Date'] = pd.to_datetime(df['Order_Date'], errors='coerce')
        # 如果需要特定日期字符串格式,可以再轉換一次:df['Order_Date'] = df['Order_Date'].dt.strftime('%Y-%m-%d')
        
        print("\n   --- 轉換后數(shù)據(jù)類型 ---")
        print(df.dtypes)

        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df.to_excel(output_path, index=False)
        
        print(f"? 數(shù)據(jù)類型轉換成功!結果保存到:'{os.path.basename(output_path)}'")
        print("\n   --- 轉換后數(shù)據(jù)頭部 ---")
        print(df.head())
    except Exception as e:
        print(f"? 數(shù)據(jù)類型轉換失?。簕e}")

if __name__ == "__main__":
    test_excel_path = os.path.expanduser("~/Desktop/mixed_data.xlsx")
    output_cleaned_path = os.path.expanduser("~/Desktop/mixed_data_cleaned.xlsx")

    # 簡單創(chuàng)建測試文件,包含字符串形式的數(shù)字和不同格式的日期
    pd.DataFrame({'Sales_Amount': ['123', '456.78', 'N/A', '789'], 
                  'Order_Date': ['2023-01-15', '1/2/23', 'March 10, 2023', None]}).to_excel(test_excel_path, index=False)

    convert_data_types_in_excel(test_excel_path, output_cleaned_path)

步驟:

準備Excel文件: 在桌面創(chuàng)建mixed_data.xlsx,包含字符串形式的數(shù)字和日期。

修改代碼路徑: 修改 test_excel_path 和 output_cleaned_path。

運行: 運行 python convert_data_types.py。

展示:

3.3 異常值簡單處理:識別并過濾數(shù)據(jù)中的異常信息

場景: 數(shù)據(jù)集中出現(xiàn)明顯不合理的值,如年齡為200歲,或銷售額為負數(shù)。這些異常值會嚴重干擾統(tǒng)計分析結果。

方案: Pandas結合簡單的統(tǒng)計方法(如描述性統(tǒng)計、箱線圖)或基于業(yè)務規(guī)則的過濾,可以識別并過濾掉異常值,確保你的數(shù)據(jù)更可靠。

代碼:

import pandas as pd
import os

def handle_outliers_simple(file_path, output_path, column_name="Age", lower_bound=0, upper_bound=120):
    """
    簡單處理Excel中指定列的異常值(過濾掉超出合理范圍的數(shù)據(jù))。
    這是Python數(shù)據(jù)清洗和異常值處理的基礎。
    :param file_path: 源Excel文件路徑
    :param output_path: 處理后Excel文件的輸出路徑
    :param column_name: 要檢查異常值的列名
    :param lower_bound: 合理范圍的下限
    :param upper_bound: 合理范圍的上限
    """
    if not os.path.exists(file_path): return print(f"? Excel文件不存在:{file_path}")
    try:
        df = pd.read_excel(file_path)
        original_rows = len(df)
        print(f"?? 正在處理列 '{column_name}' 中的異常值,原始行數(shù): {original_rows}")

        # 確保列是數(shù)值類型
        df[column_name] = pd.to_numeric(df[column_name], errors='coerce')
        df_cleaned = df.dropna(subset=[column_name]) # 先刪除無法轉換為數(shù)字的行

        # **核心操作:基于閾值過濾異常值**
        df_filtered = df_cleaned[(df_cleaned[column_name] >= lower_bound) & (df_cleaned[column_name] <= upper_bound)]
        
        removed_outliers = original_rows - len(df_filtered)

        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        df_filtered.to_excel(output_path, index=False)
        
        print(f"? 異常值處理成功!已移除 {removed_outliers} 條異常數(shù)據(jù)。")
        print(f"   處理后數(shù)據(jù)已保存到:'{os.path.basename(output_path)}' (行數(shù): {len(df_filtered)})")
        print("\n   --- 處理后數(shù)據(jù)頭部 ---")
        print(df_filtered.head())
    except Exception as e:
        print(f"? 異常值處理失?。簕e}")

if __name__ == "__main__":
    test_excel_path = os.path.expanduser("~/Desktop/data_with_outliers.xlsx")
    output_cleaned_path = os.path.expanduser("~/Desktop/data_outliers_cleaned.xlsx")

    pd.DataFrame({'Name': ['A', 'B', 'C', 'D'], 
                  'Age': [25, 200, 30, -5], # 包含異常值
                  'Score': [90, 85, 95, 10]}).to_excel(test_excel_path, index=False)

    handle_outliers_simple(test_excel_path, output_cleaned_path, column_name="Age", lower_bound=1, upper_bound=100)

步驟:

準備Excel文件: 在桌面創(chuàng)建data_with_outliers.xlsx,包含一些明顯錯誤的數(shù)值(如年齡200)。

修改代碼路徑和異常值范圍: 修改 test_excel_path、output_cleaned_path 和 lower_bound/upper_bound。
運行: 運行 python handle_outliers.py。

展示:

4 你的“Excel數(shù)據(jù)貼身護衛(wèi)”!

恭喜你!通過本篇文章,你已經(jīng)掌握了Python數(shù)據(jù)清洗的各項核心魔法,

我們深入學習了Pandas庫在Excel數(shù)據(jù)處理自動化中的應用,掌握了如何:

數(shù)據(jù)去重: 運用drop_duplicates(),一鍵移除重復數(shù)據(jù),確保統(tǒng)計準確性。

缺失值處理: 運用fillna()進行智能填充,或dropna()刪除缺失值,保證數(shù)據(jù)完整無缺。

格式統(tǒng)一: 對字符串進行大小寫轉換、去除空格,確保數(shù)據(jù)一致性。

數(shù)據(jù)類型轉換: 確保數(shù)據(jù)能正確計算和分析。

異常值處理: 簡單識別并過濾數(shù)據(jù)中的“搗亂分子”,讓決策更精準。

這個“數(shù)據(jù)貼身護衛(wèi)”,將是你在數(shù)據(jù)自動化處理道路上的又一個里程碑,為你后續(xù)的Python數(shù)據(jù)分析入門打下堅實基礎!

5.展望:數(shù)據(jù)清洗魔法,開啟高質(zhì)量數(shù)據(jù)分析!

通過本篇文章,你已經(jīng)掌握了Python數(shù)據(jù)清洗的強大能力,為你的辦公自動化之旅又增添了一個重量級技能!你學會了如何利用Pandas這個Python實用工具,高效地處理Excel中的各種“臟數(shù)據(jù)”問題。

除了今天學到的功能,你還希望Python能幫你實現(xiàn)哪些Excel自動化操作?比如自動篩選數(shù)據(jù)并生成圖表?數(shù)據(jù)透 視表自動化?你會在哪些場景下使用這個“數(shù)據(jù)清潔工”?

以上就是使用Python自動化處理Excel的臟數(shù)據(jù)的詳細內(nèi)容,更多關于Python處理Excel臟數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • Pytorch dataloader在加載最后一個batch時卡死的解決

    Pytorch dataloader在加載最后一個batch時卡死的解決

    這篇文章主要介紹了Pytorch dataloader在加載最后一個batch時卡死的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python實現(xiàn)的排列組合計算操作示例

    Python實現(xiàn)的排列組合計算操作示例

    這篇文章主要介紹了Python實現(xiàn)的排列組合計算操作,涉及Python數(shù)學運算的相關函數(shù)與使用技巧,需要的朋友可以參考下
    2017-10-10
  • python解析xml文件方式(解析、更新、寫入)

    python解析xml文件方式(解析、更新、寫入)

    這篇文章主要介紹了python解析xml文件方式(解析、更新、寫入),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 詳解python如何通過numpy數(shù)組處理圖像

    詳解python如何通過numpy數(shù)組處理圖像

    Numpy?是?Python?中科學計算的核心庫,NumPy?這個詞來源于?Numerical?和?Python?兩個單詞。它提供了一個高性能的多維數(shù)組對象,以及大量的庫函數(shù)和操作,可以幫助程序員輕松地進行數(shù)值計算,廣泛應用于機器學習模型、圖像處理和計算機圖形學、數(shù)學任務等領域
    2022-03-03
  • Python 數(shù)據(jù)分析之逐塊讀取文本的實現(xiàn)

    Python 數(shù)據(jù)分析之逐塊讀取文本的實現(xiàn)

    這篇文章主要介紹了Python 數(shù)據(jù)分析之逐塊讀取文本的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python切片知識解析

    Python切片知識解析

    這篇文章主要介紹了Python切片知識解析的相關資料,需要的朋友可以參考下
    2016-03-03
  • python的數(shù)學算法函數(shù)及公式用法

    python的數(shù)學算法函數(shù)及公式用法

    在本篇內(nèi)容里小編給大家分享了一篇關于python的數(shù)學算法函數(shù)及公式用法,有興趣的朋友們可以參考下。
    2020-11-11
  • Python邊遍歷邊刪除列表元素的幾種方法

    Python邊遍歷邊刪除列表元素的幾種方法

    在 Python 中,邊遍歷邊刪除列表元素通常是一個不推薦的操作,因為它會改變列表的大小,可能會導致一些意料之外的行為,例如,元素被刪除后,列表的索引會發(fā)生變化,可能導致漏掉某些元素或者遍歷到錯誤的位置,所以本文介紹了Python邊遍歷邊刪除列表元素的幾種方法
    2024-12-12
  • Python編程matplotlib繪圖挑鉆石seaborn小提琴和箱線圖

    Python編程matplotlib繪圖挑鉆石seaborn小提琴和箱線圖

    這篇文章主要為大家介紹了Python編程如何使用matplotlib繪圖來挑出完美的鉆石以及seaborn小提琴和箱線圖,有需要的朋友可以借鑒參考下,希望能夠優(yōu)速幫助
    2021-10-10
  • Pycharm 2020.1 版配置優(yōu)化的詳細教程

    Pycharm 2020.1 版配置優(yōu)化的詳細教程

    這篇文章主要介紹了更新Pycharm 2020.1 版配置優(yōu)化的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

富宁县| 荥经县| 韩城市| 太湖县| 新化县| 玛沁县| 双江| 司法| 临沧市| 武邑县| 阿合奇县| 马公市| 琼海市| 河北省| 平顺县| 英吉沙县| 茂名市| 苗栗县| 泌阳县| 信阳市| 新宁县| 商河县| 瓮安县| 宜君县| 体育| 攀枝花市| 新晃| 荔浦县| 鸡泽县| 思南县| 广灵县| 夹江县| 石阡县| 敦化市| 三台县| 玉林市| 米脂县| 新晃| 土默特右旗| 尚志市| 郎溪县|