当前位置:首页>python>别再手动改 Excel 了:Python 自动化数据清洗全流程

别再手动改 Excel 了:Python 自动化数据清洗全流程

  • 2026-09-28 07:54:33
别再手动改 Excel 了:Python 自动化数据清洗全流程

做数据分析时,最让人崩溃的不是建模,而是打开 Excel 的那一刻:列名有空格、日期格式乱飞、金额里混着“¥”“元”“--”,同一个城市一会儿写“广州”,一会儿写“广州市”。

如果你还在一格一格手动改,数据量一大就会出错。今天这篇直接给你一套 Python 自动化清洗模板,把脏数据从“看了头大”变成“模型能吃”。

一、第一招:统一列名,让数据先变规矩

真实业务数据最常见的问题是列名不统一:

  • • 订单 金额
  • • 订单金额
  • • order_amount
  • • 金额(元)

后续写代码时,一旦列名带空格、括号、特殊符号,就很容易报错。

import pandas as pd

df = pd.read_excel("orders.xlsx")

df.columns = (
    df.columns
    .str.strip()
    .str.replace(" ", "_", regex=False)
    .str.replace("(", "(", regex=False)
    .str.replace(")", ")", regex=False)
)

print
(df.columns)

建议:项目开始时先把列名统一成英文或拼音风格,比如 order_amount、city、pay_time,后续分析会顺很多。

二、第二招:金额字段清洗,专治“看起来像数字”

很多字段肉眼看是数字,实际上是字符串:

  • • ¥99.00
  • • 1,299
  • • 暂无
  • • --

这些值不能直接求和、均值或建模,必须先转成真正的数值。

df["amount"] = (
    df["amount"]
    .astype(str)
    .str.replace("¥", "", regex=False)
    .str.replace("元", "", regex=False)
    .str.replace(",", "", regex=False)
    .str.replace("--", "", regex=False)
)

df["amount"] = pd.to_numeric(df["amount"], errors="coerce")

errors="coerce" 的意思是:转不了的值统一变成缺失值 NaN。这样比程序直接崩掉更适合批量处理。

三、第三招:日期字段标准化,别让时间拖后腿

日期字段也很容易乱:

  • • 2025/07/31
  • • 2025-7-31
  • • 20250731
  • • 2025年7月31日

用 pd.to_datetime 可以统一处理大部分格式。

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

df["year"] = df["pay_time"].dt.year
df["month"] = df["pay_time"].dt.month
df["day"] = df["pay_time"].dt.day
df["weekday"] = df["pay_time"].dt.day_name()

这样后面就可以按月份统计销售额、按星期分析转化率了。

四、第四招:类别字段去重,解决“同名不同写”

城市、渠道、产品名这些字段,最怕写法不统一。

city_map = {
    "广州市"
: "广州",
    "广州 "
: "广州",
    "深圳市"
: "深圳",
    "深 圳"
: "深圳"
}

df["city"] = df["city"].astype(str).str.strip()
df["city"] = df["city"].replace(city_map)

清洗前可以先看看有哪些奇怪写法:

print(df["city"].value_counts(dropna=False).head(20))

五、实战:写成一个可复用清洗函数

每次复制粘贴代码很麻烦,不如封装成函数。

import pandas as pd

def
 clean_orders(path):
    df = pd.read_excel(path)

    df.columns = (
        df.columns
        .str.strip()
        .str.replace(" ", "_", regex=False)
    )

    df["amount"] = (
        df["amount"].astype(str)
        .str.replace("¥", "", regex=False)
        .str.replace("元", "", regex=False)
        .str.replace(",", "", regex=False)
        .str.replace("--", "", regex=False)
    )
    df["amount"] = pd.to_numeric(df["amount"], errors="coerce")

    df["pay_time"] = pd.to_datetime(df["pay_time"], errors="coerce")
    df["city"] = df["city"].astype(str).str.strip()

    city_map = {"广州市": "广州", "深圳市": "深圳"}
    df["city"] = df["city"].replace(city_map)

    return
 df

clean_df = clean_orders("orders.xlsx")
clean_df.to_excel("orders_clean.xlsx", index=False)

六、清洗质量怎么检查?

清洗完不要急着分析,先跑这几行:

print(clean_df.info())
print
(clean_df.isna().sum())
print
(clean_df.describe())
print
(clean_df.duplicated().sum())

重点看四件事:

检查项
目的
info()
看字段类型是否正确
isna().sum()
看缺失值是否异常
describe()
看数值范围是否离谱
duplicated()
看是否有重复记录

总结:自动化清洗的黄金流程

  1. 1. 先统一列名,减少后续代码报错;
  2. 2. 再处理金额、日期、类别这些高频脏字段;
  3. 3. 能用映射表就不要手动替换;
  4. 4. 清洗后必须做质量检查;
  5. 5. 把清洗逻辑封装成函数,下次直接复用。

数据清洗不是低级活,它决定了后面所有分析和建模的上限。你平时最头疼哪种 Excel 脏数据?评论区聊聊。

最新文章

随机文章