《Python办公数据分析》第3课:数据清洗与预处理,告别“脏数据”
欢迎来到《Python办公数据分析》系列的第三讲。上一节课,我们学习了如何用Pandas读取Excel和CSV文件。但在真实的办公环境中,我们拿到的数据往往不是完美的。可能有空值、有重复项、有格式错误,这些被称为“脏数据”。如果不经过清洗就直接分析,得出的结论很可能是错误的。
欢迎大家关注此公众号,后台留言"python书籍"可免费获取【Python办公自动化高清PDF】电子书一本
此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅
什么是数据清洗?
简单来说,数据清洗就是找出数据中的异常和不一致,并进行修正的过程。
在Pandas中,我们主要处理以下三种常见的“脏数据”:
第一步:处理缺失值 (Missing Values)
在Excel里,看到空白单元格是很正常的事,但在Python中,它们通常会被识别为 NaN (Not a Number)。
1. 查找缺失值
首先要了解哪些列存在缺失值,以及缺失的数量。
import pandas as pd
df = pd.read_excel('sales_data.xlsx')
# 查看各列是否有缺失值以及数量
print(df.isnull().sum())
2. 删除缺失值
如果某行数据缺失严重,或者该数据无关紧要,最简单的方法是直接删除整行。
# 删除包含任何缺失值的行
df_clean = df.dropna()
# 仅当所有列都为空时才删除
df_clean = df.dropna(how='all')
# 仅在特定列(如'金额')存在缺失值时删除
df_clean = df.dropna(subset=['金额'])
3. 填充缺失值
如果不舍得删除,也可以用一个合理的值来填补空缺(比如用0、平均值、中位数或前一个有效值)。
# 用0填充所有缺失值
df_filled = df.fillna(0)
# 用平均值填充'金额'列
mean_value = df['金额'].mean()
df['金额'] = df['金额'].fillna(mean_value)
# 用前一个有效值填充(适合时间序列数据)
df_filled = df.fillna(method='ffill')
第二步:处理重复值 (Duplicates)
重复录入的数据会干扰统计结果,导致总和虚高。Pandas清理重复项非常方便。
1. 查找重复项
# 查看是否存在重复行(返回布尔型Series)
print(df.duplicated().sum())
2. 删除重复项
# 删除完全重复的行,保留第一条出现的记录
df_unique = df.drop_duplicates()
# 基于某一列(例如'订单编号')去重,保留最后一条出现的记录
df_unique = df.drop_duplicates(subset=['订单编号'], keep='last')
第三步:数据类型转换与格式化
有时候,读取上来的日期变成了字符串,数字变成了文本,这就需要进行类型转换。
1. 转换数据类型
# 将'销售额'列转换为浮点数
df['销售额'] = df['销售额'].astype(float)
# 将'订单日期'转换为标准的datetime类型
df['订单日期'] = pd.to_datetime(df['订单日期'])
2. 字符串处理
在办公中,经常需要对文本列进行截取、替换等操作。Pandas的 str 属性提供了丰富的方法。
# 去除'客户姓名'列前后的空格
df['客户姓名'] = df['客户姓名'].str.strip()
# 替换文本(将'Male'替换为'男')
df['性别'] = df['性别'].str.replace('Male', '男')
实战演练
在实际工作中,通常将这些清洗步骤串联起来执行:读取数据 -> 检查空值和重复项 -> 填补/删除空值 -> 去重 -> 转换类型 -> 保存清洗后的数据。这是一套标准的“流水线作业”。
课后小作业
- 2. 尝试用Pandas去除重复行,并将数值列的空值填充为0。
- 3. 将清洗后的干净数据保存为新的Excel文件。
下一节预告:数据清洗完毕后,重头戏来了。在第4课中,我们将进入数据分析的核心——如何像使用Excel数据透视表一样,用Python进行数据分组与透视,洞察业务规律!