Python 資料清理:十分鐘執靚一堆亂數據

點解數據成日咁亂?

做文職或者開舖,日日都要對住一堆數據:系統匯出嘅 CSV、供應商俾嘅 Excel、同事人手輸入嘅表。呢啲檔案十有八九都係咁——重複咗幾行、電話號碼前後多咗空格、金額嗰欄有啲係文字有啲係數字、仲有一堆空白格。用人手逐行執,一錯就返轉頭,一個鐘都未必搞得掂。用 Python 加 pandas,十分鐘就執到乾乾淨淨,仲可以留低個 script 下次一鍵重複用。

第一步:裝 pandas 同讀入檔案

先安裝 pandas,再用 read_csv 讀入數據。如果你啲數據係 Excel,改用 read_excel 就得。

import pandas as pd

# 讀入亂數據
df = pd.read_csv("orders.csv", encoding="utf-8")

# 睇下頭幾行,了解有咩問題
print(df.head())
print(df.info())

print(df.head()) 會顯示頭五行,print(df.info()) 會話你知每欄有幾多空白格。呢一步好重要——你要先搞清楚數據亂喺邊,先知點執。

第二步:去除重複行

匯出或者人手輸入最常出現嘅問題就係重複。一行訂單 copy 咗兩次,或者同一個客戶入咗兩條。用 drop_duplicates() 一嘢清走。

# 去除完全重複嘅行
df = df.drop_duplicates()

# 如果想按某欄判斷重複(例如同一張單號只留一條)
df = df.drop_duplicates(subset=["訂單編號"])

第三步:處理空白格同統一格式

空白格(NaN)會令之後嘅加總、統計出錯。電話號碼前後嘅空格,會令你搵唔到個客。呢兩樣一齊處理:

# 客戶名空白就填「未知」
df["客戶名"] = df["客戶名"].fillna("未知")

# 電話號碼統一當文字處理,去除前後空格
df["電話"] = df["電話"].astype(str).str.strip()

仲有一招好常用:日期格式。如果你啲日期一時係「2026/09/07」一時係「07-09-2026」,用 pd.to_datetime 一次過統一,之後先可以按日期排序。

df["日期"] = pd.to_datetime(df["日期"], errors="coerce")

第四步:篩選有效數據同輸出

最後篩走冇用嘅行(例如金額係零或者負數),再輸出一個乾淨嘅檔案。記得用 utf-8-sig,等 Excel 打開中文唔會亂碼。

# 只保留金額大過 0 嘅訂單
df = df[df["金額"] > 0]

# 按日期排好
df = df.sort_values("日期")

# 輸出乾淨檔案
df.to_csv("orders_clean.csv", index=False, encoding="utf-8-sig")
print("搞掂!共", len(df), "行")

執靚之後,仲可以自動化

呢個 script 寫好一次,之後每次有新手數據,只要換個檔案名再行一次就得。再進一步,仲可以用之前講過嘅定時備份、自動寄 Email 嗰套方法,set 個排程每日自動跑,朝早返工已經有份執靚咗嘅報表等你。數據清潔係所有分析同自動化嘅第一步——數據乾淨,之後先有得講預測、講慳錢。