python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel数据统计分析自动化

基于Python+pandas实现Excel数据统计分析自动化完整指南

作者:yuanpan

本文介绍了使用Python+pandas处理Excel数据的基本方法,包括数据筛选、排序、分组统计、缺失值处理等操作,并通过一个销售订单Excel统计分析案例进行演示,文章还探讨了Python在实际工作中的应用场景,如销售日报、财务对账、人事考勤统计等,并给出了一些建议和经验

在很多办公自动化场景里,Excel 是数据流转的入口:销售明细、考勤记录、库存台账、项目工时、财务流水,通常都会先以 .xlsx 文件的形式出现。如果数据量不大,手工筛选和透视表可以解决问题;但当文件每天都要处理、规则经常重复、结果还要导出给同事时,用 Python + pandas 自动化处理会更稳定,也更容易沉淀成可复用脚本。

本文围绕一个常见的“销售订单 Excel 统计分析”案例,系统演示 pandas 的 DataFrame 基本概念、读取 Excel、数据筛选、数据排序、分组统计、缺失值处理,以及导出新的 Excel 文件。

1. pandas 库简介

pandas 是 Python 数据分析领域最常用的第三方库之一,适合处理结构化数据,例如 Excel、CSV、数据库查询结果、日志表格等。它的优势主要有三点:

  1. 表格数据处理能力强:可以像操作 Excel 表一样操作行、列、筛选条件和统计字段。
  2. API 简洁:读取 Excel、分组统计、排序、缺失值处理通常只需要几行代码。
  3. 生态成熟:可以和 openpyxlxlsxwriter、matplotlib、SQLAlchemy 等库配合,完成报表生成、图表绘制、数据库读写等工作。

安装 pandas 和 Excel 读取引擎:

pip install pandas openpyxl

其中:

2. DataFrame 基本概念

pandas 中最核心的数据结构是 DataFrame。可以把它理解为 Python 里的“二维表格”:

例如下面这张 Excel 表:

订单编号日期地区产品销售员销售额成本状态
SO20260012026-04-01华东笔记本电脑张三85006500已完成
SO20260022026-04-02华南显示器李四18001200已完成
SO20260032026-04-03华北打印机王五26001900退款

读入 pandas 后,就是一个 DataFrame 对象。我们可以用代码完成筛选、计算利润、统计各地区销售额等操作。

3. 读取 Excel 文件

读取 Excel 最常用的是 pd.read_excel()

import pandas as pd

df = pd.read_excel("sales_orders.xlsx", sheet_name="订单明细")

print(df.head())
print(df.info())

常用参数说明:

示例:

df = pd.read_excel(
    "sales_orders.xlsx",
    sheet_name="订单明细",
    dtype={"订单编号": str},
    parse_dates=["日期"]
)

4. 数据筛选

数据筛选是办公自动化中最常见的操作。pandas 使用布尔条件筛选行。

4.1 筛选已完成订单

completed_df = df[df["状态"] == "已完成"]

4.2 筛选销售额大于 5000 的订单

large_orders = df[df["销售额"] > 5000]

4.3 多条件筛选

筛选“华东地区且已完成”的订单:

east_completed = df[(df["地区"] == "华东") & (df["状态"] == "已完成")]

筛选“销售额大于 5000 或产品为笔记本电脑”的订单:

important_orders = df[(df["销售额"] > 5000) | (df["产品"] == "笔记本电脑")]

注意:多个条件之间要使用 &|,每个条件都要用括号包起来。

5. 数据排序

排序使用 sort_values()

5.1 按销售额从高到低排序

df_sorted = df.sort_values(by="销售额", ascending=False)

5.2 按地区和销售额排序

先按地区升序,再按销售额降序:

df_sorted = df.sort_values(
    by=["地区", "销售额"],
    ascending=[True, False]
)

排序后如果希望重置行号:

df_sorted = df_sorted.reset_index(drop=True)

6. 分组统计

分组统计是 pandas 最适合替代 Excel 透视表的能力之一,核心方法是 groupby()

6.1 按地区统计销售额

region_summary = df.groupby("地区", as_index=False)["销售额"].sum()

结果类似:

地区销售额
华东35000
华南28000
华北19000

6.2 按地区统计销售额、成本和利润

先增加利润列:

df["利润"] = df["销售额"] - df["成本"]

再分组统计:

region_summary = df.groupby("地区", as_index=False).agg(
    订单数=("订单编号", "count"),
    销售额合计=("销售额", "sum"),
    成本合计=("成本", "sum"),
    利润合计=("利润", "sum")
)

6.3 按销售员统计业绩

seller_summary = df.groupby("销售员", as_index=False).agg(
    订单数=("订单编号", "count"),
    销售额合计=("销售额", "sum"),
    平均客单价=("销售额", "mean")
)

为了让结果更适合阅读,可以按销售额排序:

seller_summary = seller_summary.sort_values(
    by="销售额合计",
    ascending=False
).reset_index(drop=True)

7. 缺失值处理

真实业务数据很少完全干净。Excel 中可能存在空单元格、空字符串、未填写状态、缺失成本等情况。

7.1 查看缺失值数量

print(df.isna().sum())

7.2 填充文本字段缺失值

例如销售员为空时填充为“未分配”:

df["销售员"] = df["销售员"].fillna("未分配")

7.3 填充数值字段缺失值

例如成本为空时填充为 0:

df["成本"] = df["成本"].fillna(0)

7.4 删除关键字段缺失的记录

如果订单编号或销售额缺失,这类数据通常不能参与统计,可以删除:

df = df.dropna(subset=["订单编号", "销售额"])

7.5 清理字符串空格

有些 Excel 数据看起来一样,实际包含前后空格,会影响分组统计:

text_columns = ["地区", "产品", "销售员", "状态"]

for col in text_columns:
    df[col] = df[col].astype(str).str.strip()

8. 导出新的 Excel 文件

导出单个工作表:

df.to_excel("cleaned_sales_orders.xlsx", index=False)

如果要把“清洗后的明细”“地区统计”“销售员统计”写入同一个 Excel 文件,可以使用 ExcelWriter

with pd.ExcelWriter("sales_analysis_report.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="清洗后明细", index=False)
    region_summary.to_excel(writer, sheet_name="地区统计", index=False)
    seller_summary.to_excel(writer, sheet_name="销售员统计", index=False)

这样生成的 Excel 文件更适合作为日报、周报或月报附件。

9. 完整案例代码

下面给出一个完整脚本。它会:

  1. 读取销售订单 Excel。
  2. 清理缺失值和文本空格。
  3. 过滤掉退款订单。
  4. 计算利润和利润率。
  5. 生成地区统计、销售员统计、产品统计。
  6. 导出一个新的多工作表 Excel 分析报告。
from pathlib import Path

import pandas as pd


INPUT_FILE = Path("sales_orders.xlsx")
OUTPUT_FILE = Path("sales_analysis_report.xlsx")


def load_sales_data(file_path: Path) -> pd.DataFrame:
    """读取销售订单 Excel。"""
    df = pd.read_excel(
        file_path,
        sheet_name="订单明细",
        dtype={"订单编号": str},
        parse_dates=["日期"]
    )
    return df


def clean_sales_data(df: pd.DataFrame) -> pd.DataFrame:
    """清洗销售订单数据。"""
    df = df.copy()

    required_columns = ["订单编号", "日期", "地区", "产品", "销售员", "销售额", "成本", "状态"]
    missing_columns = [col for col in required_columns if col not in df.columns]
    if missing_columns:
        raise ValueError(f"Excel 缺少必要字段: {missing_columns}")

    # 删除关键字段缺失的记录
    df = df.dropna(subset=["订单编号", "销售额"])

    # 文本字段去除前后空格,并填充业务默认值
    text_columns = ["地区", "产品", "销售员", "状态"]
    for col in text_columns:
        df[col] = df[col].fillna("未填写").astype(str).str.strip()

    # 数值字段转成数字,异常值转为 NaN 后再填充
    df["销售额"] = pd.to_numeric(df["销售额"], errors="coerce")
    df["成本"] = pd.to_numeric(df["成本"], errors="coerce")
    df = df.dropna(subset=["销售额"])
    df["成本"] = df["成本"].fillna(0)

    # 日期字段统一转换
    df["日期"] = pd.to_datetime(df["日期"], errors="coerce")

    # 只统计已完成订单,排除退款、取消等状态
    df = df[df["状态"] == "已完成"].copy()

    # 增加业务分析字段
    df["利润"] = df["销售额"] - df["成本"]
    df["利润率"] = df["利润"] / df["销售额"]

    return df.reset_index(drop=True)


def build_summary(df: pd.DataFrame) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
    """生成地区、销售员和产品三个维度的统计表。"""
    region_summary = df.groupby("地区", as_index=False).agg(
        订单数=("订单编号", "count"),
        销售额合计=("销售额", "sum"),
        成本合计=("成本", "sum"),
        利润合计=("利润", "sum"),
        平均订单金额=("销售额", "mean")
    )
    region_summary["利润率"] = region_summary["利润合计"] / region_summary["销售额合计"]
    region_summary = region_summary.sort_values("销售额合计", ascending=False)

    seller_summary = df.groupby("销售员", as_index=False).agg(
        订单数=("订单编号", "count"),
        销售额合计=("销售额", "sum"),
        利润合计=("利润", "sum"),
        平均客单价=("销售额", "mean")
    )
    seller_summary = seller_summary.sort_values("销售额合计", ascending=False)

    product_summary = df.groupby("产品", as_index=False).agg(
        订单数=("订单编号", "count"),
        销售额合计=("销售额", "sum"),
        利润合计=("利润", "sum")
    )
    product_summary = product_summary.sort_values("销售额合计", ascending=False)

    return (
        region_summary.reset_index(drop=True),
        seller_summary.reset_index(drop=True),
        product_summary.reset_index(drop=True)
    )


def export_report(
    detail_df: pd.DataFrame,
    region_summary: pd.DataFrame,
    seller_summary: pd.DataFrame,
    product_summary: pd.DataFrame,
    output_file: Path
) -> None:
    """导出 Excel 分析报告。"""
    with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
        detail_df.to_excel(writer, sheet_name="清洗后明细", index=False)
        region_summary.to_excel(writer, sheet_name="地区统计", index=False)
        seller_summary.to_excel(writer, sheet_name="销售员统计", index=False)
        product_summary.to_excel(writer, sheet_name="产品统计", index=False)


def main() -> None:
    raw_df = load_sales_data(INPUT_FILE)
    cleaned_df = clean_sales_data(raw_df)
    region_summary, seller_summary, product_summary = build_summary(cleaned_df)
    export_report(cleaned_df, region_summary, seller_summary, product_summary, OUTPUT_FILE)

    print(f"分析完成,已生成文件: {OUTPUT_FILE.resolve()}")


if __name__ == "__main__":
    main()

10. 工作中的实际应用场景

Python + pandas 处理 Excel 的价值,不只是“少点几下鼠标”,更重要的是把重复、易错、依赖人工经验的流程标准化。

10.1 销售日报和月报

销售部门每天导出订单明细后,可以自动生成:

脚本每天跑一次,就能把报表结果稳定输出到固定目录。

10.2 财务对账

财务经常需要比对订单系统、支付平台和发票系统的数据。pandas 可以用订单号、流水号等字段做合并和差异检查,自动找出:

10.3 人事考勤统计

考勤机导出的 Excel 通常字段多、格式不统一。通过 pandas 可以清理日期、员工编号、部门名称,再统计:

10.4 库存和采购分析

对于库存台账,可以用 pandas 统计:

10.5 批量数据质检

当 Excel 是业务系统导入前的模板时,可以先用 pandas 做校验:

发现问题后,把异常数据单独导出给业务人员修改,比导入系统后再报错更高效。

11. 实战建议

在真实项目中使用 pandas 处理 Excel,可以遵循下面几条经验:

  1. 先明确输入字段和输出结果,不要一边写代码一边猜业务规则。
  2. 对关键字段做校验,例如订单编号、日期、金额、状态。
  3. 清洗数据时尽量保留原始文件,不要直接覆盖源 Excel。
  4. 中间结果拆成多个函数,方便后续维护和复用。
  5. 导出报告时使用多个工作表,让明细和统计结果分开。

总结

pandas 非常适合 Python 办公自动化方向的 Excel 数据分析任务。它既能完成基础的读取、筛选、排序、缺失值处理,也能像 Excel 透视表一样做分组统计,还可以把清洗后的明细和统计结果导出为新的 Excel 报告。

当你的工作中出现“每天都要处理类似 Excel”“人工筛选容易出错”“统计口径需要固定下来”这类需求时,就很适合用 pandas 写成自动化脚本。这样不仅能提高效率,也能让数据处理过程更透明、更可复用。

以上就是基于Python+pandas实现Excel数据统计分析自动化完整指南的详细内容,更多关于Python Excel数据统计分析自动化的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文