Pandas进阶指南之数据合并与缺失值处理详解

 更新时间:2026年04月29日 08:36:00   作者:小庄-Python办公  
这篇文章主要为大家详细介绍了使用Python的pandas库进行Excel数据处理的进阶技巧,主要包括数据清洗,多表合并与拼接,数据透 视表制作等办公自动化核心功能,希望对大家有所帮助

本节课,我们将学习数据清洗(处理缺失值)、多表关联合并(Python版的VLOOKUP),以及如何用一行代码生成数据透 视表。

数据清洗:处理缺失数据 (NaN)

从系统导出的数据经常会遇到空白单元格,pandas 会将其识别为 NaN (Not a Number)。在分析前,我们必须妥善处理这些空值。

import pandas as pd

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

# 1. 查看哪些列有缺失值
print(df.isnull().sum())

# 2. 删除含有缺失值的行
# 如果某行只要有空值就整行删除
df_dropped = df.dropna()
# 只有当"销售额"这一列为空时,才删除该行
df_dropped_subset = df.dropna(subset=["销售额"])

# 3. 填充缺失值
# 将所有空值填充为 0
df_filled_0 = df.fillna(0)
# 针对不同列填充不同的值:数值列填0,文本列填"未知"
df_filled = df.fillna({"销售额": 0, "部门": "未知部门"})

多表合并(Merge):碾压 VLOOKUP

在Excel中,如果我们要根据“工号”把两张表的数据匹配到一起,通常会用到 VLOOKUP 公式。如果数据量大,VLOOKUP会非常卡。而在 pandas 中,merge() 函数可以瞬间完成万级数据的匹配。

假设我们有两张表:

  • df_emp: 包含 [工号, 姓名, 部门ID]
  • df_dept: 包含 [部门ID, 部门名称, 部门负责人]
df_emp = pd.read_excel("employees.xlsx")
df_dept = pd.read_excel("departments.xlsx")

# 使用 merge 进行关联匹配
# on="部门ID" 表示依据这一列进行匹配
# how="left" 表示以左表(df_emp)为基准,找不到的部门信息显示为 NaN
merged_df = pd.merge(df_emp, df_dept, on="部门ID", how="left")

print(merged_df.head())

多表拼接(Concat):上下堆叠数据

每个月你都会收到一份格式相同的月度销售表(1月.xlsx, 2月.xlsx…),你需要把它们汇总成一张年度大表。这时用 concat() 最合适。

df_jan = pd.read_excel("1月销售.xlsx")
df_feb = pd.read_excel("2月销售.xlsx")

# ignore_index=True 表示重新生成行索引(0,1,2...),忽略原来的行号
df_total = pd.concat([df_jan, df_feb], ignore_index=True)

制作数据透 视表(Pivot Table)

Excel 的数据透 视表功能极其强大,而在 pandas 中,同样可以通过 pivot_table 轻松实现。

需求:统计每个城市(行)、每个部门(列)的平均销售额。

# data: 要透 视的 DataFrame
# values: 要计算的数值列
# index: 对应透 视表的“行”标签
# columns: 对应透 视表的“列”标签
# aggfunc: 计算方式(默认是均值 mean,这里我们用 sum 求和)
# fill_value=0: 如果透 视后有空缺,用0填充
pivot = pd.pivot_table(
    df, 
    values="销售额", 
    index="城市", 
    columns="部门", 
    aggfunc="sum", 
    fill_value=0
)
print(pivot)
# 将透 视表结果保存为Excel
pivot.to_excel("销售数据透 视表.xlsx")

将多个 DataFrame 导出到同一个 Excel 的不同 Sheet 页

有时候我们希望把原始数据、汇总数据、透 视表放在同一个 Excel 文件的不同标签页中。

# 使用 ExcelWriter 上下文管理器
with pd.ExcelWriter("最终报告.xlsx") as writer:
    df_total.to_excel(writer, sheet_name="全年明细", index=False)
    merged_df.to_excel(writer, sheet_name="员工部门信息", index=False)
    pivot.to_excel(writer, sheet_name="城市部门透 视表")
print("多Sheet报表导出成功!")

知识扩展

在 pandas 中,最核心的数据结构叫做 DataFrame。你可以把它直接想象成 Excel 中的一张二维数据表,有行号(Index)和列名(Columns)。

读取与保存 Excel 数据

pandas 读取和保存数据的代码极其简洁,通常只需要一行代码!

import pandas as pd

# 1. 读取 Excel 文件
# 默认读取第一个 Sheet 页
df = pd.read_excel("sales_data.xlsx")

# 也可以指定读取名为 '2023数据' 的 Sheet
# df = pd.read_excel("sales_data.xlsx", sheet_name="2023数据")

# 查看前5行数据,快速了解数据概况
print(df.head())

# 查看数据的基本信息(行数、列数、数据类型、是否有缺失值)
print(df.info())

# 2. 将 DataFrame 保存为新的 Excel 文件
# index=False 表示不保存最左侧的行索引号
df.to_excel("sales_data_backup.xlsx", index=False)

数据筛选:精准定位你想要的数据

在Excel中,我们通常点击表头上的漏斗图标进行筛选。在 pandas 中,我们通过“条件判断”来实现。

假设我们的表中有:姓名, 部门, 销售额, 城市 等列。

单条件筛选

找出所有“销售部”的员工数据:

sales_dept = df[df["部门"] == "销售部"]
print(sales_dept)

找出销售额大于 10000 的记录:

high_sales = df[df["销售额"] > 10000]

多条件筛选

在 pandas 中,& 代表“且”(AND),| 代表“或”(OR)。注意:每个条件必须用括号括起来!

找出“销售部” 且 “销售额大于10000” 的数据:

excellent_sales = df[(df["部门"] == "销售部") & (df["销售额"] > 10000)]

找出在“北京”或“上海”的员工数据:

# 方法一:使用 |
bj_sh_staff = df[(df["城市"] == "北京") | (df["城市"] == "上海")]

# 方法二:使用 isin() 方法(推荐,更优雅)
bj_sh_staff = df[df["城市"].isin(["北京", "上海"])]

数据排序

类似Excel中的升序/降序功能,pandas 使用 sort_values() 方法。

# 按照销售额从高到低排序(降序:ascending=False)
sorted_df = df.sort_values(by="销售额", ascending=False)

# 多列排序:先按部门升序,部门相同的再按销售额降序
sorted_multi = df.sort_values(by=["部门", "销售额"], ascending=[True, False])

数据分组统计 (GroupBy)

这是数据分析中最常用的功能之一!相当于Excel中简单版的数据透 视表。

需求:统计每个部门的总销售额。

# 按“部门”分组,并对“销售额”求和
dept_sales = df.groupby("部门")["销售额"].sum()

# 重置索引,让结果变成一个漂亮的 DataFrame
dept_sales_df = dept_sales.reset_index()
print(dept_sales_df)

需求:统计每个城市的员工人数、平均销售额。

# 使用 agg 函数进行多种聚合计算
city_stats = df.groupby("城市").agg({
    "姓名": "count",       # 计数(人数)
    "销售额": "mean"       # 求平均值
})
# 修改列名以便阅读
city_stats.rename(columns={"姓名": "员工人数", "销售额": "平均销售额"}, inplace=True)
print(city_stats)

小结

通过本节课,你已经掌握了数据分析中最核心的数据清洗、表关联拼接和数据透 视功能。你手头的武器库已经足够应对 80% 的日常数据处理需求了。

最后一节课,我们将结合 os 模块,进行一次酣畅淋漓的实战:一键自动读取上百个Excel文件,处理合并后自动生成带有格式的报表!

到此这篇关于Pandas进阶指南之数据合并、透 视表与缺失值处理详解的文章就介绍到这了,更多相关Pandas数据处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python如何写入dbf文件内容及创建dbf文件

    python如何写入dbf文件内容及创建dbf文件

    这篇文章主要介绍了python如何写入dbf文件内容及创建dbf文件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python操作excel的包(openpyxl、xlsxwriter)

    python操作excel的包(openpyxl、xlsxwriter)

    这篇文章主要为大家详细介绍了python操作excel的包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python的变量与赋值详细分析

    python的变量与赋值详细分析

    这篇文章主要介绍了python的变量与赋值详细分析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 基于PyQT实现区分左键双击和单击

    基于PyQT实现区分左键双击和单击

    这篇文章主要介绍了基于PyQT实现区分左键双击和单击,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python实现将PDF转DOCX的超简单教程(附源码)

    Python实现将PDF转DOCX的超简单教程(附源码)

    在日常工作中,我们经常需要将 PDF 文件转换为 Word(.docx) 方便编辑,本文主要介绍了如何Python如何使用pdf2docx实现这一功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-12-12
  • 详解Python matplotlib中的色彩使用详解

    详解Python matplotlib中的色彩使用详解

    matplotlib中提供了一些常见颜色的字符串,并封装成了几个颜色字典,这篇文章主要来和大家讲解一下matplotlib中的色彩使用,需要的可以参考一下
    2023-07-07
  • pytorch模型的保存和加载、checkpoint操作

    pytorch模型的保存和加载、checkpoint操作

    这篇文章主要介绍了pytorch模型的保存和加载、checkpoint操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • python脚本实现分析dns日志并对受访域名排行

    python脚本实现分析dns日志并对受访域名排行

    这篇文章主要介绍了python脚本实现分析dns日志并对受访域名排行,本文是在Windows服务器环境中实现,需要的朋友可以参考下
    2014-09-09
  • Python3多线程详解

    Python3多线程详解

    使用多线程,可以同时进行多项任务,可以使用户界面更友好,还可以后台执行某些用时长的任务,同时具有易于通信的优点。python3中多线程的实现使用了threading模块,它允许同一进程中运行多个线程,本文介绍的非常详细,,需要的朋友可以参考下
    2023-05-05
  • Go语言基于Socket编写服务器端与客户端通信的实例

    Go语言基于Socket编写服务器端与客户端通信的实例

    这篇文章主要介绍了Go语言基于Socket编写服务器端与客户端通信的实例,包括实现基于自定义通讯协议的Socket通信,需要的朋友可以参考下
    2016-02-02

最新评论